'System.Data.OleDb.OleDbException' 发生在 System.Data.dll 但未在用户代码中处理
'System.Data.OleDb.OleDbException' occurred in System.Data.dll but was not handled in user code
每当我 运行 这段代码时,我总是收到这个错误,我真的找不到我在这里缺少的东西所以请帮助我提前谢谢
错误:
'System.Data.OleDb.OleDbException' 发生在 System.Data.dll 但未在用户代码中处理
附加信息:条件表达式中的数据类型不匹配。
前端代码:
<asp:GridView ID="gvFunction" runat="server" AutoGenerateColumns="false" CssClass="Grid"
DataKeyNames="ID" OnRowDataBound="OnRowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<img alt = "" style="cursor: pointer" src="images/plus.png" />
<asp:Panel ID="pnlOrders" runat="server" Style="display: none">
<asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="false" CssClass = "ChildGrid">
<Columns>
<asp:BoundField ItemStyle-Width="150px" DataField="ID" HeaderText="ID" />
<asp:BoundField ItemStyle-Width="150px" DataField="FunctionDate" HeaderText="Function Date" />
<asp:BoundField ItemStyle-Width="150px" DataField="FunctionTime" HeaderText="Function Time" />
<asp:BoundField ItemStyle-Width="150px" DataField="CelebrateName" HeaderText="Celebrate Name" />
</Columns>
</asp:GridView>
</asp:Panel>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField ItemStyle-Width="150px" DataField="ID" HeaderText="ID" />
<asp:BoundField ItemStyle-Width="150px" DataField="FunctionDate" HeaderText="Function Date" />
<asp:BoundField ItemStyle-Width="150px" DataField="CelebrateName" HeaderText="Celebrate Name" />
</Columns>
</asp:GridView>
后端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.OleDb;
using System.Data;
namespace mntfinal
{
public partial class editreport : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
gvFunction.DataSource = GetData("select ID,
FunctionDate, CelebrateName from function");
gvFunction.DataBind();
}
}
private static DataTable GetData(string query)
{
string strConnString = ConfigurationManager.ConnectionStrings
["MandapamDatabase"].ConnectionString;
using (OleDbConnection con = new OleDbConnection(strConnString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandText = query;
using (OleDbDataAdapter sda = new OleDbDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
}
}
}
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string ID = gvFunction.DataKeys[e.Row.RowIndex].Value.ToString();
GridView gvOrders = e.Row.FindControl("gvOrders") as GridView;
gvOrders.DataSource = GetData(string.Format("select ID,FunctionDate,FunctionTime,CelebrateName from function where ID='{0}'", ID));
gvOrders.DataBind();
}
}
}
}
你的ID字段是int还是string字段?尝试将字符串更改为 int,并删除 {0} 周围的引号。
The criteria expression is the part of the query containing the
conditions, as in WHERE .
问题似乎出在您的 where 子句上,您正在尝试将 ID 列值(可能是整数)与字符串进行比较。
试试这个,我已经 删除了 {0}:
周围的单引号
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string ID = gvFunction.DataKeys[e.Row.RowIndex].Value.ToString();
GridView gvOrders = e.Row.FindControl("gvOrders") as GridView;
gvOrders.DataSource = GetData(string.Format("select ID,FunctionDate,FunctionTime,CelebrateName from function where ID={0}", ID));
gvOrders.DataBind();
}
}
一个非常粗略的猜测是,该字符串 ID 包含一些奇怪的东西.. 例如"null"
检查什么
string.Format("select ID,FunctionDate,FunctionTime,CelebrateName from function where ID='{0}'", ID)
看起来像 post 最后的 sql 声明,我想我们可以在这里看到原因。
每当我 运行 这段代码时,我总是收到这个错误,我真的找不到我在这里缺少的东西所以请帮助我提前谢谢
错误: 'System.Data.OleDb.OleDbException' 发生在 System.Data.dll 但未在用户代码中处理
附加信息:条件表达式中的数据类型不匹配。
前端代码:
<asp:GridView ID="gvFunction" runat="server" AutoGenerateColumns="false" CssClass="Grid"
DataKeyNames="ID" OnRowDataBound="OnRowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<img alt = "" style="cursor: pointer" src="images/plus.png" />
<asp:Panel ID="pnlOrders" runat="server" Style="display: none">
<asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="false" CssClass = "ChildGrid">
<Columns>
<asp:BoundField ItemStyle-Width="150px" DataField="ID" HeaderText="ID" />
<asp:BoundField ItemStyle-Width="150px" DataField="FunctionDate" HeaderText="Function Date" />
<asp:BoundField ItemStyle-Width="150px" DataField="FunctionTime" HeaderText="Function Time" />
<asp:BoundField ItemStyle-Width="150px" DataField="CelebrateName" HeaderText="Celebrate Name" />
</Columns>
</asp:GridView>
</asp:Panel>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField ItemStyle-Width="150px" DataField="ID" HeaderText="ID" />
<asp:BoundField ItemStyle-Width="150px" DataField="FunctionDate" HeaderText="Function Date" />
<asp:BoundField ItemStyle-Width="150px" DataField="CelebrateName" HeaderText="Celebrate Name" />
</Columns>
</asp:GridView>
后端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.OleDb;
using System.Data;
namespace mntfinal
{
public partial class editreport : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
gvFunction.DataSource = GetData("select ID,
FunctionDate, CelebrateName from function");
gvFunction.DataBind();
}
}
private static DataTable GetData(string query)
{
string strConnString = ConfigurationManager.ConnectionStrings
["MandapamDatabase"].ConnectionString;
using (OleDbConnection con = new OleDbConnection(strConnString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandText = query;
using (OleDbDataAdapter sda = new OleDbDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
}
}
}
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string ID = gvFunction.DataKeys[e.Row.RowIndex].Value.ToString();
GridView gvOrders = e.Row.FindControl("gvOrders") as GridView;
gvOrders.DataSource = GetData(string.Format("select ID,FunctionDate,FunctionTime,CelebrateName from function where ID='{0}'", ID));
gvOrders.DataBind();
}
}
}
}
你的ID字段是int还是string字段?尝试将字符串更改为 int,并删除 {0} 周围的引号。
The criteria expression is the part of the query containing the conditions, as in WHERE .
问题似乎出在您的 where 子句上,您正在尝试将 ID 列值(可能是整数)与字符串进行比较。 试试这个,我已经 删除了 {0}:
周围的单引号protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string ID = gvFunction.DataKeys[e.Row.RowIndex].Value.ToString();
GridView gvOrders = e.Row.FindControl("gvOrders") as GridView;
gvOrders.DataSource = GetData(string.Format("select ID,FunctionDate,FunctionTime,CelebrateName from function where ID={0}", ID));
gvOrders.DataBind();
}
}
一个非常粗略的猜测是,该字符串 ID 包含一些奇怪的东西.. 例如"null"
检查什么 string.Format("select ID,FunctionDate,FunctionTime,CelebrateName from function where ID='{0}'", ID) 看起来像 post 最后的 sql 声明,我想我们可以在这里看到原因。