插入声明奇怪的错误
我正在调用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,动作
1 wrapCloseInAction)
1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔callerHasConnectionLock,布尔asyncClose)
在System.Data.SqlClient.TdsParser.TryRun(runBehavior runBehavior, 的SqlCommand cmdHandler,SqlDataReader的数据流, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔& 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(对象发件人,EventArgs e)如 C:\用户\肯\文件\ GitHub的\ MegaFileUploadConversionService \ TestingTool \ 4900ProjectDesktopInterface \ Form1.cs:line 152 \ r \ nClientConnectionId:fb95122f-415b-484d-9438-903f0bf2aad 0"
你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();
}
}
正如我在comment说,你应该总是使用parameterized queries。您的代码是开放的SQL Injection attakcs
你可能想要改变你的答案来使用参数,就像你(理所当然地)在你对该问题的评论中建议的那样。 – 2013-03-23 11:34:09
@ Christian.K更新了';)'谢谢你的警告.. – 2013-03-23 11:42:31
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();
}
}
你忘了关闭右边括号里
它看起来像你不终止的值开括号?为什么你使用String.Format?你可以摆脱conn.close,因为使用声明会隐含地做到这一点。
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的内容。 – 2013-03-23 11:15:24
'obj.userRef.ToString()'的值是什么?如果它包含一个单引号或其他一些非转义符号,那么它可能会破坏您的查询 – 2013-03-23 11:15:45
至少在关闭时)值是从sql语句中丢失的。 – Goran 2013-03-23 11:16:16