首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于“ System.Data.OleDb.OleDbException: 至少一个参数没有被指定值。”的错误,请问

2011-12-10 
关于“ System.Data.OleDb.OleDbException: 至少一个参数没有被指定值。”的错误,请教大家看这段代码,我检查

关于“ System.Data.OleDb.OleDbException: 至少一个参数没有被指定值。”的错误,请教
大家看这段代码,我检查很久,我估计是   sql   语句那里有错误,但是我还是不知道怎么改,请大家帮我看看,
protected   void   SearchButton_Click(object   sender,   EventArgs   e)
        {
                resultmsg.Text   =   " ";
                string   strIp   =   IPTextBox.Text;
                long   ipvalue   =   IpToNum(strIp);//这个函数的目的是将IP地址转换为数值          
                OleDbCommand   dataCommand   =   new   OleDbCommand();
                ConnectAccessDB();
                dataCommand.Connection   =   accessConn;
                dataCommand.CommandText=                    
                "SELECT   *   FROM   iptable   "   +
              "WHERE       starp <=ipvalue   AND   endp> =ipvalue ";                
                OleDbDataReader   dataReader   =   dataCommand.ExecuteReader();//   96   行,错误所在行
                while   (dataReader.Read())
                {  
                        resultmsg.Text+=   dataReader.GetString(5);  
                        resultmsg.Text+=   dataReader.GetString(6);  
                }
                dataCommand.Connection.Close();
                accessConn.Close();
        }
提示错误:
异常详细信息:   System.Data.OleDb.OleDbException:   至少一个参数没有被指定值。
源错误:  


行   94:                   "SELECT   *   FROM   iptable   "   +
行   95:                 "WHERE       starp <=ipvalue   AND   endp> =ipvalue ";                
行   96:                   OleDbDataReader   dataReader   =   dataCommand.ExecuteReader();
行   97:                   while   (dataReader.Read())
行   98:                   {  
 

源文件:   e:\Visual   Studio   2005\WebSites\IP   search\IpSearch.aspx.cs         行:   96  
我这里没有同学可以请教,所以期待网上各位朋友帮助!

[解决办法]
这样改,此行改为
dataCommand.CommandText=
"SELECT * FROM iptable " +
"WHERE starp <=? AND endp> =? ";
在执行之前的地方加入这一行:
dataCommand.Parameters.AddWithValue( "starp ", ipvalue);


dataCommand.Parameters.AddWithValue( "endp ", ipvalue);

访问access数据库,参数应该为?代表,参数赋值方法见上面的,我的是vs2005,vs2003下可能没有AddWithValue方法,你用对应的赋值函数就是
[解决办法]
dataCommand.CommandText= "SELECT * FROM iptable WHERE starp <= " + ipvalue + " AND endp> = " + ipvalue;
[解决办法]
ipvalue 又不是数据库里的字段,不能直接用,需要拼字符串
dataCommand.CommandText= "SELECT * FROM iptable WHERE starp <= " + ipvalueToString() + " AND endp> = " + ipvalue.ToString();

热点排行