错误-必须声明标量变量-C#
我正在使用C#将文件上传到文件夹中。点击上传后出现错误,错误为“必须声明标量变量”@TABLE_ID”。我做了一些研究,尝试使用其他示例,但仍然出现错误。这是上传的函数:错误-必须声明标量变量-C#,c#,mysql,asp.net,variables,scalar,C#,Mysql,Asp.net,Variables,Scalar,我正在使用C#将文件上传到文件夹中。点击上传后出现错误,错误为“必须声明标量变量”@TABLE_ID”。我做了一些研究,尝试使用其他示例,但仍然出现错误。这是上传的函数: protected void UploadFile(object sender, EventArgs e) { string str = ConfigurationManager.ConnectionStrings["Ulysses"].ConnectionString; string
protected void UploadFile(object sender, EventArgs e)
{
string str = ConfigurationManager.ConnectionStrings["Ulysses"].ConnectionString;
string filenam = FileUpload1.FileName.ToString();
string TABLE_NAME = "REQUEST";
int table_id = -1;
table_id = generateNextId("SP_LINK_TABLE_FIELD_ID");
string path = @"C:\Users\muhd\Documents\CyberLink";
path = path + filenam;
FileUpload1.PostedFile.SaveAs(path);
SqlConnection con = new SqlConnection(str);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "Insert into OLE(LINK_TABLE_ID, LINK_TABLE_NAME, OLE_LINK_FILE_NAME) values(@TABLE_ID,@TABLE_NAME,@FILE_NAME)";
cmd.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
command.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
command.Parameters.AddWithValue("@FILE_NAME",path);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
表_id是使用另一个函数从存储过程中获取的。请参阅以下内容:
protected int generateNextId(string strStoredProcedureName)//this is for inserting table_field_id for uploading attachment
{
int intNewId = 0;
try
{
strConn = ConfigurationManager.ConnectionStrings["Ulysses"].ToString();
conn = new SqlConnection(strConn);
command = new SqlCommand(strStoredProcedureName, conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@newid", SqlDbType.Int);
command.Parameters["@newid"].Direction = ParameterDirection.ReturnValue;
conn.Open();
command.ExecuteNonQuery();
intNewId = (int)command.Parameters["@newid"].Value;
}
catch (Exception ex)
{
}
finally
{
conn.Close();
conn = null;
}
return intNewId;
}
}
这是我使用的存储过程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_LINK_TABLE_FIELD_ID]
AS
begin tran;
declare @nextid integer;
update generator set current_number = current_number + 1 where generator = 'LINK_TABLE_FIELD';
select @nextid = current_number from generator where generator = 'LINK_TABLE_FIELD';
commit tran;
return @nextid;
我不知道为什么需要声明,即使是其他具有相同样式的函数,代码也没有问题,但这一个显示了此错误。我希望任何人都能对此问题提供一些见解。感谢高级。您正在执行的命令是
cmd
,而不是命令
。您没有将参数添加到correct命令对象
command.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
command.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
command.Parameters.AddWithValue("@FILE_NAME",path);
应该是:
cmd.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
cmd.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
cmd.Parameters.AddWithValue("@FILE_NAME",path);
您正在执行的命令是
cmd
,而不是command
。您没有将参数添加到正确的命令对象中
command.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
command.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
command.Parameters.AddWithValue("@FILE_NAME",path);
应该是:
cmd.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
cmd.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
cmd.Parameters.AddWithValue("@FILE_NAME",path);
发布存储过程您正在将查询设置为变量
cmd
,但随后要将参数分配给变量命令
。有些参数不匹配。@Sachu抱歉,忘记了。已发布存储过程。请尝试更改命令。参数。AddWithValue(@TABLE\u ID),SqlDbType.Int).Value=table_id;to-ommand.Parameters.AddWithValue(“@table_id”,table_id);这不是mysql
,而是SQL Server。请使用适当的方法生成唯一ID。您的代码不适合竞争条件。相反,请使用UPDATE…OUTPUT
子句。发布存储过程您正在将查询设置为变量cmd
,但随后要将参数分配给变量comm和
。有些不匹配。@Sachu抱歉忘记了。已经发布了存储过程。请尝试更改命令。参数。AddWithValue(“@TABLE\u ID”,SqlDbType.Int)。值=TABLE\u ID;到-ommand.Parameters.AddWithValue(“@TABLE\u ID”,TABLE\u ID);这不是mysql
,而是SQL Server。请使用适当的方法生成唯一ID。您的代码对竞争条件不安全。相反,请使用UPDATE…OUTPUT
子句。@Deniswesses他可能正在向另一个全局对象添加参数。这样,SQL将@TABLE_ID
视为标量查询变量找不到。SqlCommand
没有将其替换为值。在他的情况下,这是一个变量名问题。是的,我不知道cmd和命令不匹配。感谢您看到我哪里做错了。@DenisWessels他可能正在将参数添加到另一个全局对象。这样,SQL将@TABLE_ID
视为sc找不到alar查询变量。SqlCommand
不会将其替换为当时的值。在他的情况下,这是一个变量名问题。是的,我不知道cmd和命令不匹配。感谢您看到我哪里做错了。