C#Excel VSTO OLE DB参数错误必须声明标量变量



在Excel中编写VSTO插件(使用C#(时,我试图使用OLEDB从SQL数据库中检索值。当我调试此函数时,它在catch上失败。

我得到的信息是:

必须声明标量变量"@uname";

但我在绑定参数时已经这样做了。我做错了什么?

public static int getUserID(string username)
{
int result = 0;
string sql = @"select top 1 [ID] FROM " + tbl_users + " WHERE ( [UNAME]=@uname );";
Console.WriteLine("sql: " + sql);
using (OleDbConnection conn = new OleDbConnection(connStr))
{
try
{
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@uname", username);
result = (int)cmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
result = -15;
}
finally
{
conn.Close();
conn.Dispose();
}
}
return result;
}

所以我想我明白了。。。这个改变是有效的,但我真的不喜欢。

首先,我需要使用OleDb参数绑定,而不是SqlParameter绑定。

OleDb似乎也不喜欢像@uname这样的自定义命名参数,而是依赖于参数的顺序(我不喜欢这样(。因此,如果有人感兴趣,这里有一个解决方案:

public static int getUserID(string username)
{
int result = 0;
string sql = @"select top 1 [ID] FROM " + tbl_users + " WHERE ( [UNAME]=? );";
Console.WriteLine("sql: " + sql);
using (OleDbConnection conn = new OleDbConnection(connStr))
{
try
{
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.Parameters.Add("?", OleDbType.VarChar).Value = Convert.ToString(username);


result = (int)cmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
result = -15;
}
finally
{
conn.Close();
conn.Dispose();
}
}
return result;
}

相关内容

  • 没有找到相关文章

最新更新