2017-08-07 6 views
0

明確にするために、私がやった次私はC#を使用していますが、実行時に作成されたクラスタイプに対応するServiceStack.OrmLiteを使用してテーブルを作成しました。(動的に作成されたテーブルからの)特殊文字のエスケープ

  • ランタイム(はEmployeeType)でタイプを作成した後、私は行うことができ、以下:

db.CreateTableIfNotExists(employeeType);

これはに対応するテーブルの従業員を作成します(動的に作成されたタイプの "従業員")。

  • 実際、私の問題は、Employeeテーブルの列名には、%、/ ...などの特殊文字が含まれていることです。今説明したようにテーブルを作成するとうまくいきましたが、このテーブルに行を挿入しようとすると、SQL文の構文エラー(列名に特殊文字があるため)の例外がありました。私が持っていたexcptionは(thisを確認してください)以下の通りです:問題がでているので、詳細については

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

、私がテーブルに持っている列の名前は「TokenRequestsPerSec_Request \秒」であります

var typedApi = db.CreateTypedApi(employeeType);

: "\"

は、私は、Employeeテーブルの列を挿入するために、以下の使用しました

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文で特殊文字をエスケープするためのソリューションがあります:

SQLサーバーにOrmLiteで実行されるINSERT文を参照してくださいhereを確認してください?

ありがとうございました!

+0

System.Data.SqlClient.SqlErrorCollection: '('に近い構文が無効です。\ r \ nスカラー変数\ "@ TokenRequestsPerSec_Request \"を宣言する必要があります。それはOrmLiteが生成したこと:) 'Execの長いINSERT文の\『 – Adel

+0

@mjwills 『問題がでているので、』 TokenRequestsPerSec_Request \秒」情報については は、私がテーブルに持っている列の名前です』 sp_executesql N'INSERT "ScanADFS"( "MonitoredObjectId"、 "ScanDate"、 "ScanDateInMs"、 "SystemServiceStatus"、 "CertificateServiceStatus"、 "FederationServiceStatus"、 "CpuUsage_Percentage"、 "RamAvailable_MB"、 "DiskTime_Percentage" "AverageDiskQueueLength"、 "SystemPingTime_ms"、 "CertificateSigningExpirationDate"、 "CertificateTokenDecryptingExpirationDate"、 "CertificateServiceCommunicationsExpirationDate"、 "TokenRequests"、 "TokenRequestsPerSec_Request(S)/第二"、 "ArtifactResolutionRequests_ms" ' – Adel

+0

あなたのポスト@Adelでそれを含めてください。 – mjwills

答えて

-1

あなたは=はusernum#\ "" "ID = \ BY ORDERユーザSELECT * FROM?" この

文字列のクエリのように試すことができます。

または

select * from "username#" desc;

関連する問題