【发布时间】:2013-03-13 05:42:14
【问题描述】:
我在 azure 中调用 Web 服务并使用以下方法填充数据库。不知道怎么回事。。
using (SqlConnection conn = new SqlConnection(cs))
{
using (SqlCommand command = conn.CreateCommand())
{
conn.Open();
string cmdText = String.Format("INSERT INTO UserFiles VALUES('" + obj.userRef.ToString() + "','name','name','name','name','name','name'");
command.CommandText = cmdText;
command.ExecuteNonQuery();
conn.Close();
}
}
这是错误信息:
System.Data.SqlClient.SqlException (0x80131904):语法不正确 在“名字”附近。
在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, 布尔型 breakConnection,Action
1 wrapCloseInAction)1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior 运行行为, SqlCommand cmdHandler、SqlDataReader 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady)
在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串 方法名、布尔异步、Int32 超时)
在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 完成,字符串方法名,布尔型 sendToPipe,Int32 超时, 布尔 asyncWrite)
在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
在 _4900ProjectDesktopInterface.Form1.uploadbutton_Click(Object sender, EventArgs e) 中 C:\Users\Ken\Documents\GitHub\MegaFileUploadConversionService\TestingTool\4900ProjectDesktopInterface\Form1.cs:line 152\r\nClientConnectionId:fb95122f-415b-484d-9438-903f0bf2aad0"
【问题讨论】:
-
请将表格定义和cmdText的内容放入问题中。
-
obj.userRef.ToString()的值是多少?如果它包含单引号或其他一些未转义的符号,那么它可能会破坏您的查询 -
sql 语句中至少缺少值的关闭 )。
-
您应该始终使用parameterized queries。您的代码对SQL Injection_ attakcs 开放。
-
@LeeTaylor 不是真的 - 只要值的数量及其类型与架构匹配。
标签: c# sql-server tsql