1

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.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.OnError (SqlException 例外、ブール値 breakConnection、アクション1 wrapCloseInAction) で System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj、ブール値 callerHasConnectionLock、ブール値 asyncClose) で System.Data.SqlClient.TdsParser で。 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName , Boolean async, Int32 timeout) で System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (TaskCompletionSource`1 完了、文字列 methodName、ブール sendToPipe、Int32 タイムアウト、ブール asyncWrite)1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action






C:\Users\Ken\Documents\GitHub\MegaFileUploadConversionService\TestingTool\4900ProjectDesktopInterface\Form1.cs:line 152\ の System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at _4900ProjectDesktopInterface.Form1.uploadbutton_Click(オブジェクト送信者、EventArgs e) r\nClientConnectionId:fb95122f-415b-484d-9438-903f0bf2aad0"

4

3 に答える 3

3

最後にcmdTextもう 1 つ必要)です。

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();
   }
}

コメントで述べたように、常にパラメータ化されたクエリを使用する必要があります。あなたのコードはSQL インジェクション攻撃に対してオープンです

于 2013-03-23T11:19:25.753 に答える
2
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();
   }
}

右括弧を忘れている

于 2013-03-23T11:18:36.383 に答える
0

値の開き括弧を終了していないように見えますか? なぜString.Formatを使用しているのですか? usingステートメントが暗黙的にこれを行うため、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();
   }
}
于 2013-03-23T11:18:53.107 に答える