«System.Data.OleDb.OleDbException» возникло в System.Data.dll, но не было обработано в пользовательском коде.

я продолжаю получать эту ошибку всякий раз, когда я запускаю этот код, и я действительно не могу найти то, что мне здесь не хватает, поэтому, пожалуйста, помогите мне заранее спасибо

ошибка: «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();
        }
    }
}
}

person Community    schedule 03.08.2016    source источник


Ответы (3)


Выражение условия — это часть запроса, содержащая условия, как в 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();
        }
    }
person sachin    schedule 03.08.2016

Является ли ваше поле идентификатора целым или строковым полем? Попробуйте изменить строку на int и удалить кавычки вокруг {0}.

person Dennisvdh    schedule 03.08.2016
comment
его номер авто, и я думаю, это int? если это так, не могли бы вы сказать мне, как я могу заменить value.Tostring()? потому что я совсем любитель - person ; 03.08.2016
comment
Сначала попробуйте код, предоставленный @sachin, думаю, этого достаточно. - person Dennisvdh; 03.08.2016

очень грубое предположение состоит в том, что идентификатор строки содержит что-то странное.. например. "нулевой"

проверьте, как выглядит string.Format("выберите ID,FunctionDate,FunctionTime,CelebrateName из функции, где ID='{0}'", ID) и опубликуйте окончательный оператор sql здесь, я думаю, мы можем увидеть причину здесь.

person Tom Söhne    schedule 03.08.2016