未处理 sqlexception 必须声明标量变量 "@uname

天地玄王 2012-10-18 08:51:56
DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("uname",txtusername .Text ));


txtusername 为 txtbox控件
错误显示:
未处理 sqlexception 必须声明标量变量 "@uname"

请大神帮帮忙,小弟不才,十分感谢!好人一生平安!
...全文
292 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2012-10-26
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
引用 15 楼 的回复:

还有种简单方法:
把你上面的代码
DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("uname",txtusername .Text ));
改为:
DataTable dt = sqlhelper.execu……
[/Quote]
这是你C#的问题

DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("@uname",txtusername .Text ));

你是参数名.后面你声明成啥了.@都没有.
SQL77 2012-10-26
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]
引用 18 楼 的回复:

引用 17 楼 的回复:
引用 15 楼 的回复:

还有种简单方法:
把你上面的代码
DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("uname",txtusername .Text ));
改为:
……
[/Quote]

            string sqlconnstring = "";
SqlConnection conn = new SqlConnection(sqlconnstring);
conn.Open();
SqlCommand cmd = new SqlCommand("select * from (select 'a' as name) t where name=@name", conn);
SqlParameter para = new SqlParameter("@name", SqlDbType.VarChar, 20);
para.Value = "a";
cmd.Parameters.Add(para);
object o=cmd.ExecuteScalar();


给你这个简单的示例。
SQL77 2012-10-26
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]
引用 18 楼 的回复:

引用 17 楼 的回复:
引用 15 楼 的回复:

还有种简单方法:
把你上面的代码
DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("uname",txtusername .Text ));
改为:
……
[/Quote]
那要看你DBHelper类里面怎么写了。
天地玄王 2012-10-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

引用 17 楼 的回复:
引用 15 楼 的回复:

还有种简单方法:
把你上面的代码
DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("uname",txtusername .Text ));
改为:
DataTable dt =……
[/Quote]
只加@也不行,15楼的可以
XBodhi. 2012-10-26
  • 打赏
  • 举报
回复
("uname",txtusername .Text )); uname 写成 @uname
ChangeMyself2012 2012-10-25
  • 打赏
  • 举报
回复

DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("@uname",txtusername .Text ));

public static DataTable executreader(string sql, params SqlParameter[] parameters)
{
string connstr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
foreach (SqlParameter p in parameters)
{
if (p != null)
cmd.Parameters.Add(p);
}

DataSet dataset = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
DataTable table = dataset.Tables[0];
return table;
}
}
}
天地玄王 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

肯定是你的 sqlhelper.executreader中接受参数后,没有把参数值赋给SqlCommand了
贴出来sqlhelper中executreader的实现
[/Quote]
我也是这么觉得的!但怎么改呢?
ChangeMyself2012 2012-10-25
  • 打赏
  • 举报
回复
DataTable dt = sqlhelper.executreader("declare @uname nvarchar(100) select * from T_users where uname=@uname",new SqlParameter ("@uname",txtusername .Text ));
我猜的,很久木有写这样的代码了!
天地玄王 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

还有种简单方法:
把你上面的代码
DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("uname",txtusername .Text ));
改为:
DataTable dt = sqlhelper.executreader(string……
[/Quote]
15楼的对 13楼的运行得不出正确结果
非常感谢!
好人一生平安
天地玄王 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("@uname",txtusername .Text ));

public static DataTable executreader(string sql, params SqlParamet……
[/Quote]
为什么要加
A:foreach (SqlParameter p in parameters)
{
if (p != null)
cmd.Parameters.Add(p);
}
A和B不重复吗?
B:DataSet dataset = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
还是B没起作用!
ChangeMyself2012 2012-10-25
  • 打赏
  • 举报
回复
还有种简单方法:
把你上面的代码
DataTable dt = sqlhelper.executreader("select * from T_users where uname=@uname",new SqlParameter ("uname",txtusername .Text ));
改为:
DataTable dt = sqlhelper.executreader(string.Format("select * from T_users where uname='{0}'",txtusername.Text),null);
天地玄王 2012-10-22
  • 打赏
  • 举报
回复
x_wy46 贴出来了!注意查收
天地玄王 2012-10-22
  • 打赏
  • 举报
回复
public static DataTable executreader(string sql, params SqlParameter[] parameters)
{
string connstr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;

using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
DataSet dataset = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
DataTable table = dataset.Tables[0];
return table;
}
}
}
专注or全面 2012-10-21
  • 打赏
  • 举报
回复
肯定是你的 sqlhelper.executreader中接受参数后,没有把参数值赋给SqlCommand了
贴出来sqlhelper中executreader的实现
發糞塗牆 2012-10-21
  • 打赏
  • 举报
回复
大神来了
DBA_磊仔 2012-10-21
  • 打赏
  • 举报
回复
DataTable dt = sqlhelper.executreader("select * from T_users where uname=''"+txtusername .Text+"''"));
天地玄王 2012-10-21
  • 打赏
  • 举报
回复
大神在哪里?????啊啊啊!!!
天地玄王 2012-10-18
  • 打赏
  • 举报
回复
好吧!还是灰常感谢。
發糞塗牆 2012-10-18
  • 打赏
  • 举报
回复
那等别人吧
天地玄王 2012-10-18
  • 打赏
  • 举报
回复
不行,出错了
加载更多回复(2)

22,299

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧