0

構文エラーが発生します。

文字列 'OKWhere UerName=Sam' の後の引用符が閉じていません。'OKWhere UserName=sam' 付近の不正な Sysntax。

コード:

cmd.CommandText = "UPDATE SystemInfo SET" + " UserName='" + UserName + "',
UserDomainName='" + UserDomainName + "',UserMachineName='" + UserMachineName 
+"',UserIP='" + UserIP + "', UserOsVersion='" + UserOsVersion + 
"',UserSystemDirectory='" + UserSystemDirectory + "',UserCurrentDirectory='" + 
UserCurrentDirectory + "', ProcessorName='" + ProcessorName + "', 
ProcessMnufacturer='" + ProcessMnufacturer + "',ProcessorID='" + ProcessorID + 
"',ProcessorDescription='" + ProcessorDescription + "',ProcessorVersion='" + 
ProcessorVersion + "',ProcessorStatus='" + ProcessorStatus + "',ProcessorDeviceId='" + 
ProcessorDeviceId + "', OSCaption='" + OSCaption + "',OSSerialNumber='" +  
SSerialNumber + "',OSManufacturer ='" + OSManufacturer + "',OSVersion='" + OSVersion + 
"', OSStatus='" + OSStatus + "',OSName='" + OSName + "', BiosName='" + BiosName + 
"',BiosVersion='" + BiosVersion + "',BiosSerialNumber='" + BiosSerialNumber + "', 
BiosManufacturer='" + BiosManufacturer + "',BiosCurrentlanguage='" + 
BiosCurrentlanguage + "', BiosStatus='" + BiosStatus + "Where UserName=" + 
UserName.ToString ();
4

3 に答える 3

6
BiosStatus + "Where UserName="

WHERE句の前にスペースが必要で、引用符を追加すると、次のUserNameようになります。

BiosStatus + " Where UserName='" + UserName.ToString() + "'"

追加のメモとして、パラメーター化されたクエリを試して使用してください。SQL Injectionこれにより、攻撃を防ぐことができます。次のようなことを行うことで、これを実現できます。

command.CommandText = "UPDATE TABLE " +  
         "SET BiosStatus = $BiosStatus, BiosManufacturer = $BiosManufacturer " +  
         "WHERE UserName = $UserName";  

 command.Parameters.AddWithValue("$BiosStatus", BiosStatus);  
 command.Parameters.AddWithValue("$BioManufacturer", BiosManufacturer);  
 command.Parameters.AddWithValue("$UserName", UserName);  
于 2013-06-17T10:31:13.587 に答える
1

パラメーター。常に常にパラメーター。実際には、すべての入力が現在のインスタンス ( this) のプロパティであるように見えるため、「dapper」のようなツールがここで非常に役立ちます。

conn.Execute(@"UPDATE SystemInfo SET
UserName=@UserName,
UserDomainName=@UserDomainName,
UserMachineName=@UserMachineName,
UserIP=@UserIP,
-- ...lots skipped...
BiosCurrentlanguage=@BiosCurrentlanguage,
BiosStatus=@BiosStatus
Where UserName=@UserName", this);

2 番目のパラメーターとして、SQLthisに存在する現在のインスタンスのすべてのプロパティを使用してパラメーターを追加するため、、、などを追加します...@UserName@UserDomainName

もちろん、生の ADO.NET を使用して同じことを手動で行うこともできます。

cmd.CommandText = @"UPDATE SystemInfo SET
UserName=@UserName,
UserDomainName=@UserDomainName,
UserMachineName=@UserMachineName,
UserIP=@UserIP,
-- ...lots skipped...
BiosCurrentlanguage=@BiosCurrentlanguage,
BiosStatus=@BiosStatus
Where UserName=@UserName";
cmd.Parameters.AddWithValue("UserName", ((object)UserName) ?? DBNull.Value);
cmd.Parameters.AddWithValue("UserDomainName", ((object)UserDomainName) ?? DBNull.Value);
// ...lots skipped...
cmd.Parameters.AddWithValue("BiosCurrentlanguage", ((object)BiosCurrentlanguage) ?? DBNull.Value);
cmd.Parameters.AddWithValue("BiosStatus", ((object)BiosStatus) ?? DBNull.Value);
cmd.ExecuteNonQuery();
于 2013-06-17T10:41:10.787 に答える
-2

修正してみる

BiosStatus + "Where UserName="

BiosStatus + " Where UserName='"+  UserName.ToString ()+ "'";
于 2013-06-17T10:34:39.710 に答える