2017-08-07 58 views
0

我使用C#,我创建了一个表,使用ServiceStack.OrmLite,对应于在运行时创建的类类型。需要明确的是,我做了以下内容:在ormlite中插入特殊字符(从动态创建的表)

  • 建立在运行时(employeeType)的类型后,我能做到以下几点:

db.CreateTableIfNotExists(employeeType);

这将创建对应Employee表(动态创建的类型“员工”)。

  • 实际上,我的问题是Employee表列名包含一些特殊字符(如:%,/ ...等)。创建表的方式和我刚刚描述的一样,但是当我尝试在此表中插入一行时,由于SQL语句中的语法错误(由于列名中存在特殊字符),我产生了一个异常。我有excption是以下(检查this):

System.Data.SqlClient.SqlErrorCollection: Incorrect syntax near '('.\r\nMust declare the scalar variable \"@TokenRequestsPerSec_Request\"."

有关信息,我在表中的列的名称是“TokenRequestsPerSec_Request \秒”这样的问题是与“\”

我用下面的插入在Employee表柱:

var typedApi = db.CreateTypedApi(employeeType);

typedApi.Insert(employeeInstance);

请检查here地看到OrmLite到SQL服务器执行的INSERT语句:

exec sp_executesql N'INSERT INTO "ScanADFS" ("MonitoredObjectId","ScanDate","ScanDateInMs","EntityStatus","SystemServiceStatus","CertificateServiceStatus","FederationServiceStatus", "CpuUsage_Percentage","RamAvailable_MB","DiskTime_Percentage","AverageDiskQueueLength","SystemPingTime_ms","CertificateSigningExpirationDate","CertificateTokenDecryptingExpirationDate", "CertificateServiceCommunicationsExpirationDate","TokenRequests","TokenRequestsPerSec_Request(s)/Second","ArtifactResolutionRequests_ms","ArtifactResolutionRequestsPerSec_Request(s)/Second", "ExternalAuthenticationFailures","ExtranetAccountLockouts","FederationMetaDataRequests","FederationMetaDataRequestsPerSec_Request(s)/Second","FederatedAuthenticationFailures","PasswordChangeFailedRequests", "PasswordChangeSuccessfulRequests","SystemPingTest","SystemPowershellPerformanceCountersTest","SystemWindowsServicesTest","SystemCpuTest","SystemRamTest","SystemDiskTimeTest","SystemAverageDiskQueueTest", "SystemDiskSpaceTest","CertificateTest","FederationTest","SystemPingThreshold_ms","CpuThreshold_Percentage","RamThreshold_MB","DiskTimeThreshold_Percentage","AverageDiskQueueLengthThreshold", "CertificateValidityThreshold_Days") VALUES (@MonitoredObjectId,@ScanDate,@ScanDateInMs,@EntityStatus,@SystemServiceStatus,@CertificateServiceStatus,@FederationServiceStatus,@CpuUsage_Percentage,@RamAvailable_MB,@DiskTime_Percentage, @AverageDiskQueueLength,@SystemPingTime_ms,@CertificateSigningExpirationDate,@CertificateTokenDecryptingExpirationDate,@CertificateServiceCommunicationsExpirationDate,@TokenRequests, @TokenRequestsPerSec_Request(s)/Second,@ArtifactResolutionRequests_ms,@ArtifactResolutionRequestsPerSec_Request(s)/Second,@ExternalAuthenticationFailures,@ExtranetAccountLockouts, @FederationMetaDataRequests,@FederationMetaDataRequestsPerSec_Request(s)/Second,@FederatedAuthenticationFailures,@PasswordChangeFailedRequests,@PasswordChangeSuccessfulRequests, @SystemPingTest,@SystemPowershellPerformanceCountersTest,@SystemWindowsServicesTest,@SystemCpuTest,@SystemRamTest,@SystemDiskTimeTest,@SystemAverageDiskQueueTest,@SystemDiskSpaceTest, @CertificateTest,@FederationTest,@SystemPingThreshold_ms,@CpuThreshold_Percentage,@RamThreshold_MB,@DiskTimeThreshold_Percentage,@AverageDiskQueueLengthThreshold,@CertificateValidityThreshold_Days)' ,N'@MonitoredObjectId int,@ScanDate datetime,@ScanDateInMs bigint,@EntityStatus varchar(7),@SystemServiceStatus varchar(7),@CertificateServiceStatus varchar(2),@FederationServiceStatus varchar(2),@CpuUsage_Percentage float,@RamAvailable_MB float,@DiskTime_Percentage float,@AverageDiskQueueLength float,@SystemPingTime_ms float,@CertificateSigningExpirationDate varchar(21),@CertificateTokenDecryptingExpirationDate varchar(21),@CertificateServiceCommunicationsExpirationDate varchar(19),@TokenRequests float,@TokenRequestsPerSec_Request(s)/Second float,@ArtifactResolutionRequests_ms float,@ArtifactResolutionRequestsPerSec_Request(s)/Second float,@ExternalAuthenticationFailures float,@ExtranetAccountLockouts float,@FederationMetaDataRequests float,@FederationMetaDataRequestsPerSec_Request(s)/Second float,@FederatedAuthenticationFailures float,@PasswordChangeFailedRequests float,@PasswordChangeSuccessfulRequests float,@SystemPingTest varchar(2),@SystemPowershellPerformanceCountersTest varchar(2),@SystemWindowsServicesTest varchar(2),@SystemCpuTest varchar(2),@SystemRamTest varchar(2),@SystemDiskTimeTest varchar(2),@SystemAverageDiskQueueTest varchar(2),@SystemDiskSpaceTest float,@CertificateTest varchar(2),@FederationTest varchar(2),@SystemPingThreshold_ms float,@CpuThreshold_Percentage float,@RamThreshold_MB float,@DiskTimeThreshold_Percentage float,@AverageDiskQueueLengthThreshold float,@CertificateValidityThreshold_Days float', @MonitoredObjectId=2,@ScanDate='2017-08-07 15:27:48',@ScanDateInMs=1502112468000,@EntityStatus='Warning',@SystemServiceStatus='Warning',@CertificateServiceStatus='Up',@FederationServiceStatus='Up',@CpuUsage_Percentage=36,719999999999999,@RamAvailable_MB=592,@DiskTime_Percentage=0,@AverageDiskQueueLength=0,@SystemPingTime_ms=1,@CertificateSigningExpirationDate='5/21/2018 12:49:00 AM',@CertificateTokenDecryptingExpirationDate='5/21/2018 12:48:55 AM',@CertificateServiceCommunicationsExpirationDate='6/9/2018 5:31:25 PM',@TokenRequests=0,@TokenRequestsPerSec_Request(s)/Second=0,@ArtifactResolutionRequests_ms=0,@ArtifactResolutionRequestsPerSec_Request(s)/Second=0,@ExternalAuthenticationFailures=0,@ExtranetAccountLockouts=0,@FederationMetaDataRequests=63876,@FederationMetaDataRequestsPerSec_Request(s)/Second=1,@FederatedAuthenticationFailures=0,@PasswordChangeFailedRequests=0,@PasswordChangeSuccessfulRequests=0,@SystemPingTest='Up',@SystemPowershellPerformanceCountersTest='Up',@SystemWindowsServicesTest='Up',@SystemCpuTest='Up',@SystemRamTest='Up',@SystemDiskTimeTest='Up',@SystemAverageDiskQueueTest='Up',@SystemDiskSpaceTest=2,@CertificateTest='Up',@FederationTest='Up',@SystemPingThreshold_ms=275,@CpuThreshold_Percentage=80,@RamThreshold_MB=500,@DiskTimeThreshold_Percentage=90,@AverageDiskQueueLengthThreshold=2,@CertificateValidityThreshold_Days=30

是否有逃避OrmLite INSERT语句中特殊字符的解决方案吗?

谢谢你的帮助!

+0

System.Data.SqlClient.SqlErrorCollection:'('。\ r \ n附近的语法不正确。必须声明标量变量\“@ TokenRequestsPerSec_Request \”。“ 有关信息,我在表中列的名称是”TokenRequestsPerSec_Request \ Seconds“,所以问题出在”\“ – Adel

+0

@mjwills这是OrmLite生成的一条长插入语句:) 'exec sp_executesql N'INSERT INTO“ScanADFS”(“MonitoredObjectId”,“ScanDate”,“ScanDateInMs”,“EntityStatus”,“SystemServiceStatus”,“CertificateServiceStatus”,“FederationServiceStatus”, “CpuUsage_Percentage”,“RamAvailable_MB”,“DiskTime_Percentage” “AverageDiskQueueLength”,“SystemPingTime_ms”,“CertificateSigningExpirationDate”,“CertificateTokenDecryptingExpirationDate”, “CertificateServiceCommunicationsExpirationDate”,“TokenRequests”,“TokenRequestsPerSec_Request(s)/ Second”,“ArtifactResolutionRequests_ms” – Adel

+0

请在您的文章@Adel。 – mjwills

回答

-1

你可以尝试这样的

查询字符串= “SELECT * FROM用户其中id = ORDER BY \?” usernum#\ “”;

select * from test order by“username#”desc;