これにはかなり長い間戸惑いましたが、明確な答えを見つけることができませんでした..
SQL Server 2005 Express でクエリ アナライザを使用しているときに、次のような 16 進数値を送信できるのはなぜですか。
UPDATE Table_A
SET COLUMN_B = 0xabc123ff (example)
WHERE (COLUMN_A = 'hello')
それをC#で使用すると、「COLUMN_B付近の構文が正しくありません」というエラーが表示されます
そして、ストアド プロシージャを作成すると、ビジュアル スタジオで開くだけでも機能するようです。
ただし、Visual Studio で c# を使用してこのストアド プロシージャを呼び出すと、「COLUMN_B 付近の構文が正しくありません」というエラーが表示されます。
===追加情報===
COLUMN_B は varbinary (1740) です。
入力をvarcharとして受け取ってから変換しようとしましたが、これも好きではありません。また、それを変換することはできません..
私が望むことをしているように見えるいくつかのクエリを見てきましたが、それらはかなり大きいです。クエリを介してデータを入力する場合とまったく同じように C# コードが処理されるようにするにはどうすればよいですか?
これが少し不明確に思われる場合はお詫びします。現在手元にないため、必要に応じて後でより多くのコードを提供します..
アップデート
以下に示すビットは、SQL ストアド プロシージャを呼び出すために使用するものです。これまでのところ、他のすべてのストアド プロシージャで正常に機能しています。
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["WebDB"].ConnectionString))
{
//State the Stored Proc and add Values to 'cmd' to pass to the Stored Proc
SqlCommand cmd = new SqlCommand("_USP_inv", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("Name", C5_name.Text);
cmd.Parameters.AddWithValue("Inventory", inventory);
try
{
// Open Connection and execute Stored Proc
conn.Open();
cmd.ExecuteScalar();
....
finally
{
if (conn.State == System.Data.ConnectionState.Open)
{
//Close connection IF open
conn.Close();
}
}
}
現在のストアドプロシージャ
@Name varchar(10),
@Inventory varbinary(1740)
AS
UPDATE Inventory
SET Inventory = @Inventory
WHERE (Name = @Name)