大家看这段代码,我检查很久,我估计是 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
我这里没有同学可以请教,所以期待网上各位朋友帮助!
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
我这里没有同学可以请教,所以期待网上各位朋友帮助!
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);
}
}
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<=" + ipvalueToString() + " AND endp>=" + ipvalue.ToString();
但是你可否把
WHERE starp<=? AND endp>=?
dataCommand.Parameters.AddWithValue("starp", ipvalue); 简单解释下,或者我参考哪些书可以知道? 谢谢
但是我有个疑问:我的数据库库iptable 中,startp 和 endp 都是数字型。而在程序中 ipvalue 是 long 型
这里 + ipvalue + 或 + ipvalue.ToString() + 怎么都可行。
按照常理,数字型应该只能和long 型比较大小?不知道是什么原因?