这让我困惑了好久,一直没能找到明确的答案。。
为什么在 SQL Server 2005 express 中使用查询分析器时,我能够提交一个十六进制值,例如:
UPDATE Table_A
SET COLUMN_B = 0xabc123ff (example)
WHERE (COLUMN_A = 'hello')
当我在 c# 中使用它时,它给了我错误“COLUMN_B 附近的语法不正确”
当我创建一个存储过程时,它仍然(似乎)也可以工作,只是通过视觉工作室打开它..
但是,当我通过 c# 在 Visual Studio 中调用此存储过程时,出现错误:“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)