大家看这段代码,我检查很久,我估计是 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 
我这里没有同学可以请教,所以期待网上各位朋友帮助!

解决方案 »

  1.   

    其中函数 ConnectAccessDB()实现如下:
    private void ConnectAccessDB()
        {
         string accessString=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
            +Server.MapPath("iptable.mdb");
             accessConn=new OleDbConnection(accessString);
             try
             {
                 accessConn.Open();
             }
             catch (Exception ex)
             {
                 Response.Write(ex.Message);
                 
             }
        }
      

  2.   

    这样改,此行改为 
    dataCommand.CommandText=          
            "SELECT * FROM iptable " +
           "WHERE   starp<=? AND endp>=?"; 
    在执行之前的地方加入这一行:
    dataCommand.Parameters.AddWithValue("starp", ipvalue);
    dataCommand.Parameters.AddWithValue("endp", ipvalue);访问access数据库,参数应该为?代表,参数赋值方法见上面的,我的是vs2005,vs2003下可能没有AddWithValue方法,你用对应的赋值函数就是
      

  3.   

    dataCommand.CommandText="SELECT * FROM iptable WHERE   starp<=" + ipvalue +  " AND endp>=" + ipvalue;
      

  4.   

    ipvalue 又不是数据库里的字段,不能直接用,需要拼字符串
    dataCommand.CommandText="SELECT * FROM iptable WHERE   starp<=" + ipvalueToString() +  " AND endp>=" + ipvalue.ToString();
      

  5.   

    谢谢 slhsun(曾经沧海) 朋友,你的方法可行,呵呵
    但是你可否把
     WHERE   starp<=? AND endp>=?
    dataCommand.Parameters.AddWithValue("starp", ipvalue); 简单解释下,或者我参考哪些书可以知道? 谢谢
      

  6.   

    也谢谢GT7466(),zjhphc(赵建宏)  朋友你们的方法也可行!
    但是我有个疑问:我的数据库库iptable 中,startp 和 endp 都是数字型。而在程序中 ipvalue 是 long 型 
    这里 + ipvalue + 或 + ipvalue.ToString() + 怎么都可行。
    按照常理,数字型应该只能和long 型比较大小?不知道是什么原因?