2016-08-03 5 views
1

Ich bekomme diesen Fehler immer wenn ich diesen Code benutze und ich kann wirklich nicht finden, was ich hier vermisse, also bitte helfen Sie mir Danke im Voraus'System.Data.OleDb.OleDbException' trat in System.Data.dll auf, wurde aber nicht im Benutzercode behandelt

der Fehler: 'System.Data.OleDb.OleDbException' aufgetreten in System.Data.dll wurde aber in Benutzercode

Zusätzliche Informationen nicht behandelt: Datentypenkonflikt in Kriterium-Ausdruck.

der Front-End-Code:

<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> 

Zurück Endcode:

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(); 
     } 
    } 
} 
} 

Antwort

1

The criteria expression is the part of the query containing the conditions, as in WHERE .

Das Problem scheint mit where-Klausel zu sein, Sie versuchen, den ID-Spaltenwert zu vergleichen (was eine ganze Zahl sein kann) mit einem String. Versuchen Sie dieses, ich habe die einfachen Anführungszeichen entfernt um {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(); 
     } 
    } 
+1

Vielen Dank, dass mein Problem gelöst hat –

0

Ist Ihr ID-Feld ein int oder ein String-Feld? Versuchen Sie, die Zeichenfolge in ein int zu ändern, und entfernen Sie die Anführungszeichen um {0}.

+0

ist es auf Auto-Nummer und ich denke, es ist ein Int? wenn es ist kannst du mir bitte sagen wie ich value.Tostring() ersetzen kann? cuz im ganz ein Amateur –

+0

Probieren Sie den Code von @Sachin zuerst, ich denke, das ist genug. – Dennisvdh

+0

Vielen Dank für die Hilfe, die es wirklich geholfen hat –

0

eine sehr grobe Schätzung ist, dass String-ID etwas seltsam enthält .. z.B. "Null"

Scheck was string.Format ("select ID, FunctionDate, FunctionTime, CelebrateName aus Funktion, wo ID = '{0}'", ID) aussieht und poste die endgültige SQL-Anweisung hier, ich denke, Wir können die Ursache hier sehen.

Verwandte Themen