C# Insert语句错误
我正在azure中调用一个web服务,并使用以下方法填充DB。我不知道怎么了C# Insert语句错误,c#,sql-server,tsql,C#,Sql Server,Tsql,我正在azure中调用一个web服务,并使用以下方法填充DB。我不知道怎么了 using (SqlConnection conn = new SqlConnection(cs)) { using (SqlCommand command = conn.CreateCommand()) { conn.Open(); string cmdText = String.Format("INSERT INTO UserFiles VALUES('" + obj.userR
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:语法不正确
靠近“name”
在
System.Data.SqlClient.SqlConnection.OnErrorSqlException异常,
布尔断开连接,Action1 wrapCloseInAction
在
System.Data.SqlClient.SqlInternalConnection.OnErrorSqlException
异常、布尔断开连接、Action1 wrapCloseInAction
位于System.Data.SqlClient.TdsParser.ThroweException和WarningDsParserStateObject
stateObj,布尔调用方连接锁,布尔异步关闭
在System.Data.SqlClient.TdsParser.tryrunbenhavior运行行为中,
SqlCommand cmdHandler、SqlDataReader数据流、,
BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject
stateObj、Boolean和dataReady
位于System.Data.SqlClient.SqlCommand.RunExecuteOnQueryTDString
methodName,布尔异步,Int32超时
位于System.Data.SqlClient.SqlCommand.InternalExecutionQueryTaskCompletionSource`1
完成,字符串方法名,布尔sendToPipe,Int32超时,
布尔异步写入
在System.Data.SqlClient.SqlCommand.ExecuteOnQuery
在_4900ProjectDesktopInterface.Form1.uploadbutton_单击对象发送者,事件参数在
C:\Users\Ken\Documents\GitHub\MegaFileUploadConversionService\TestingTool\4900ProjectDesktopInterface\Form1.cs:line
152\r\n客户端连接ID:fb95122f-415b-484d-9438-903f0bf2aad0
你忘了右括号
您忘记了右括号看起来您没有终止值的左括号?为什么要使用String.Format?您可以去掉conn.close,因为using语句将隐式地执行此操作
using (SqlConnection conn = new SqlConnection(cs))
{
using (SqlCommand command = conn.CreateCommand())
{
conn.Open();
string cmdText = "INSERT INTO UserFiles VALUES('" + obj.userRef.ToString() + "','name','name','name','name','name','name')";
command.CommandText = cmdText;
command.ExecuteNonQuery();
}
}
看起来您没有终止值的开括号?为什么要使用String.Format?您可以去掉conn.close,因为using语句将隐式地执行此操作
using (SqlConnection conn = new SqlConnection(cs))
{
using (SqlCommand command = conn.CreateCommand())
{
conn.Open();
string cmdText = "INSERT INTO UserFiles VALUES('" + obj.userRef.ToString() + "','name','name','name','name','name','name')";
command.CommandText = cmdText;
command.ExecuteNonQuery();
}
}
您的cmdText需要在的末尾再添加一个
using (SqlConnection conn = new SqlConnection(cs))
{
using (SqlCommand command = conn.CreateCommand())
{
conn.Open();
string cmdText = String.Format("INSERT INTO UserFiles VALUES(@userRef, @name1, @name2, @name3, @name4, @name5, @name6)");
command.Parameters.AddVithValue("@userRef", obj.userRef.ToString());
command.Parameters.AddVithValue("@name1", name);
command.Parameters.AddVithValue("@name2", name);
command.Parameters.AddVithValue("@name3", name);
command.Parameters.AddVithValue("@name4", name);
command.Parameters.AddVithValue("@name5", name);
command.Parameters.AddVithValue("@name6", name);
command.CommandText = cmdText;
command.ExecuteNonQuery();
conn.Close();
}
}
正如我在我的报告中所说,你应该始终使用。您的代码已为附件打开您的cmdText需要在末尾再添加一个附件
using (SqlConnection conn = new SqlConnection(cs))
{
using (SqlCommand command = conn.CreateCommand())
{
conn.Open();
string cmdText = String.Format("INSERT INTO UserFiles VALUES(@userRef, @name1, @name2, @name3, @name4, @name5, @name6)");
command.Parameters.AddVithValue("@userRef", obj.userRef.ToString());
command.Parameters.AddVithValue("@name1", name);
command.Parameters.AddVithValue("@name2", name);
command.Parameters.AddVithValue("@name3", name);
command.Parameters.AddVithValue("@name4", name);
command.Parameters.AddVithValue("@name5", name);
command.Parameters.AddVithValue("@name6", name);
command.CommandText = cmdText;
command.ExecuteNonQuery();
conn.Close();
}
}
正如我在我的报告中所说,你应该始终使用。您的代码已打开以获取附件。请将表定义和cmdText的内容放入问题中。obj.userRef.ToString的值是多少?如果它包含一个单引号符号或一些其他未替换的符号,那么它可能会打断您的查询,至少sql语句中缺少值的结束符。您应该始终使用。您的代码已为attakcs打开。@不太可能-只要值的数量及其类型与架构匹配。请将表定义和cmdText的内容放在问题中。obj.userRef.ToString的值是多少?如果它包含一个单引号符号或一些其他未替换的符号,那么它可能会打断您的查询,至少sql语句中缺少值的结束符。您应该始终使用。您的代码已为attakcs打开。@Leetylor不太可能-只要值的数量及其类型与架构匹配。您可能希望将答案更改为使用参数,就像您在对问题的评论中正确建议的那样。您可能希望将答案更改为使用参数,就像你在对这个问题的评论中正确地建议的那样。