非常困扰: 一个OleDbCommand的参数的问题

产品老唐 2006-12-28 10:59:35

大家注意,这绝对不是一个很低级的问题,请慎重发言: ^^b


这是我的函数:
=======================================================================
public bool UserExist( string strUserID)
{
OleDbCommand cmd = new OleDbCommand(
@"SELECT COUNT(1) FROM T_USER WHERE CardID = @strUserID ", m_conn );

cmd.Parameters.Add( "@strUserID", OleDbType.VarWChar,50 );
cmd.Parameters["@strUserID"].Value =strUserID.Trim();

bool bExist = false;

m_conn.Open();

bExist = (int)cmd.ExecuteScalar() > 0;

m_conn.Close();

return bExist;
}

错误消息:
======================================================================

“/Zgsy”应用程序中的服务器错误。
--------------------------------------------------------------------------------

必须声明变量 '@strUserID'。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: 必须声明变量 '@strUserID'。

源错误:


行 91: m_conn.Open();
行 92:
行 93: bExist = (int)cmd.ExecuteScalar() > 0;
行 94:
行 95: m_conn.Close();


堆栈跟踪:

[OleDbException (0x80040e14): 必须声明变量 '@strUserID'。]
...................


...全文
1221 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoutians 2007-01-06
  • 打赏
  • 举报
回复
我用的OleDb,存储过程带参数@是行的,Text没试过。不过Text可以这样呀:"Select * from Table Where Parameter = '"+@Parameter+"'" 。
cantops 2006-12-30
  • 打赏
  • 举报
回复
正确的说很多OleDb驱动不支持参数名,只支持参数顺序!
update [xxxx] set aa=?,bb=?,cc=?
增加参数时只按顺序不按名称
零点逸族 2006-12-29
  • 打赏
  • 举报
回复
好像就是和数据源有关系
产品老唐 2006-12-29
  • 打赏
  • 举报
回复
我用了一阵 '?',可是当我执行复合查询的时候,同一个参数的值要用到多次,
而且根据特定条件的不同,所使用的参数的次数也不同。

所以,我对显式命名参数有需求。


回楼上几个朋友:
我用的是vs.net 2003

数据库是SQL Server

这种搭配方式使用了2年多都没有出现过问题 >_<
liujia_0421 2006-12-29
  • 打赏
  • 举报
回复
To:这绝对不是一个很低级的问题,请慎重发言

看来我想得太简单了..

我也想知道你用的是什么数据库..
liujia_0421 2006-12-29
  • 打赏
  • 举报
回复
OleDb在添加参数时用"?",而不是用"@参数名"..
liujia_0421 2006-12-29
  • 打赏
  • 举报
回复
不行的话,直接这样:

public bool UserExist( string strUserID)
{
OleDbCommand cmd = new OleDbCommand(
"SELECT COUNT(1) FROM T_USER WHERE CardID = ?", m_conn );

//如果是VS2005用AddWithValue,Vs2003用Add方法
cmd.Parameters.AddWithValue("@strUserID",strUserID.Trim());


bool bExist = false;

m_conn.Open();

bExist = (int)cmd.ExecuteScalar() > 0;

m_conn.Close();

return bExist;
}
cpp2017 2006-12-29
  • 打赏
  • 举报
回复
是什么数据库,看代码是没有问题. -----难免有错,错了莫怪.
liujia_0421 2006-12-29
  • 打赏
  • 举报
回复
try..

public bool UserExist( string strUserID)
{
OleDbCommand cmd = new OleDbCommand(
"SELECT COUNT(1) FROM T_USER WHERE CardID = ? ", m_conn );

cmd.Parameters.Add( "@strUserID", OleDbType.VarWChar,50 );
cmd.Parameters["@strUserID"].Value =strUserID.Trim();

bool bExist = false;

m_conn.Open();

bExist = (int)cmd.ExecuteScalar() > 0;

m_conn.Close();

return bExist;
}
aaajedll 2006-12-29
  • 打赏
  • 举报
回复
谢谢楼上的高手和LZ的提问,让我又学到一样,爽!
cat_hsfz 2006-12-29
  • 打赏
  • 举报
回复
你用SQL Server就用SqlCommand嘛,OleDbCommand依赖于它调用的驱动,如果是Access之类的就不能用@参数只能用?代表参数。
yanglilibaobao 2006-12-29
  • 打赏
  • 举报
回复
恩,不错!顶ing
aric20099 2006-12-29
  • 打赏
  • 举报
回复
专家一出手,就知哟偶没有! 好帖.值得一顶!
malingxian 2006-12-29
  • 打赏
  • 举报
回复
OleDB不能使用"@"参数
孟子E章 2006-12-29
  • 打赏
  • 举报
回复
能不能用例子一下就知道了
孟子E章 2006-12-29
  • 打赏
  • 举报
回复
平时都用SqlClient的。SQL下OleDB还真是有点奇怪

试验了2种方法

System.Data.OleDb.OleDbConnection cn;
System.Data.OleDb.OleDbCommand cmd;
System.Data.OleDb.OleDbDataReader dr;

cn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("aspxWeb.mdb"));
cn.Open();
cmd = new System.Data.OleDb.OleDbCommand("select * from Document Where id=@id",cn);
cmd.Parameters.Add("@id", System.Data.OleDb.OleDbType.Integer, 50);
cmd.Parameters["@id"].Value = 1;
dr = cmd.ExecuteReader();
Response.Write(dr.HasRows);
dr.Close();
cn.Close();

cn = new System.Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=.;User ID=sa;Initial Catalog=EdustarApplication");
cn.Open();
cmd = new System.Data.OleDb.OleDbCommand("select * from EduUser Where id = ?", cn);
cmd.Parameters.Add("@id", System.Data.OleDb.OleDbType.Integer, 50);
cmd.Parameters["@id"].Value = 1;
dr = cmd.ExecuteReader();
Response.Write(dr.HasRows);
dr.Close();
cn.Close();
孟子E章 2006-12-29
  • 打赏
  • 举报
回复
sql server 用 SqlClient最好,SqlClient是专门为sqlseerver制作的,性能最好。
liujia_0421 2006-12-29
  • 打赏
  • 举报
回复
OleDb方式,没试过用"@",都用"?"的..
产品老唐 2006-12-29
  • 打赏
  • 举报
回复
啊,这样啊,那我用SqlClient是不是就好了?
产品老唐 2006-12-29
  • 打赏
  • 举报
回复
.net下用的SqlDB+SQL Server, OleDB+Access,OleDB+ MS SQL
加载更多回复(28)

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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