このコードを実行しようとすると:のSQLConnectionエラー:付近に正しくない構文「)」
commandObject.CommandText = string.Format("EXEC spUpdateAvailPlaces {0}, {1}, {2})", updatedAvailability, clocationID, cWeekNumber);
をこのエラーメッセージを取得しておいてください。
Incorrect syntax near ')'
このコードを実行しようとすると:のSQLConnectionエラー:付近に正しくない構文「)」
commandObject.CommandText = string.Format("EXEC spUpdateAvailPlaces {0}, {1}, {2})", updatedAvailability, clocationID, cWeekNumber);
をこのエラーメッセージを取得しておいてください。
Incorrect syntax near ')'
上記のように、エラーを返すクエリの最後に「)」を追加すると、それらを削除することで問題を解決できますが、String.FormatはSQLを構築するための良いソリューションにはならないと思いますクエリ。ここでは、パラメータ化されたクエリを使用することをお勧めします。したがって、渡す値のデータ型を指定できます。これはあなたを助けます:
using (SqlCommand cmd = new SqlCommand("spUpdateAvailPlaces", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@updatedAvailability", SqlDbType.VarChar).Value = updatedAvailability;
cmd.Parameters.Add("@clocationID", SqlDbType.VarChar).Value = clocationID;
cmd.Parameters.Add("@cWeekNumber", SqlDbType.VarChar).Value = cWeekNumber;
con.Open();
cmd.ExecuteNonQuery();
}
'EXEC'の代わりに正しいコマンドタイプを使うことの功績:) –
パラメータ化されたクエリの利点はもちろんのこと、 – Rawheiser
あなたのSQL文字列の末尾に括弧を持っています、それを削除します。
commandObject.CommandText = string.Format("EXEC spUpdateAvailPlaces {0}, {1}, {2}", updatedAvailability, clocationID, cWeekNumber);
あなたは{2}
後、余分な)
を追加しました。
試してみてください。 commandObject.CommandText = string.Format("EXEC spUpdateAvailPlaces {0}, {1}, {2}", updatedAvailability, clocationID, cWeekNumber);
エクストラ)
あなたが現在お使いの書式文字列の最後として、余分な終了括弧を持っている:
"EXEC spUpdateAvailPlaces {0}, {1}, {2})"
は次のようになります。
"EXEC spUpdateAvailPlaces {0}, {1}, {2}"
は、それはこれらのような構文の問題のいずれかの種類を避ける(と一般的にSQLインジェクションに対して助けができ、クエリを構築し、それを実行している場合は、あなたが代わりにパラメータを使用して検討するかもしれないということは注目に値しますパラメータ化
の使用を検討しますこれはストアドプロシージャを使用しているので大きな問題ではありません)。
// Set your query
commandObject.CommandText = "spUpdateAvailPlaces @availability, @location, @week";
// Ensure you are executing it as a stored procedure (important)
commandObject.CommandType = CommandType.StoredProcedure;
// Add your parameters
commandObject.Parameters.AddWithValue("@availability",updatedAvailability);
commandObject.Parameters.AddWithValue("@location",locationId);
commandObject.Parameters.AddWithValue("@week",cWeekNumber);
この問題のパラメータを設定することで、.NETが最適な使用方法を判断できるようになります。さらに、CommandType
プロパティをCommandType.StoredProcedure
に設定すると、これはクエリではなく、実際にはEXEC
経由でストアドプロシージャを実行していることを示します。
あなたは閉じ括弧を持っていますが、開きはありません。 ')'を離し、テキスト値を注入する代わりにパラメータに切り替えます。 –