2013-02-11 145 views
-3

我正在尝试连接到我们的数据库并创建一个从表中读取信息并将信息提供给文本框/标签的程序。我发现了一个错误:C#访问数据库

int numberOfRowsFeched = oleDbDataAdapter1.Fill(dataSet1, "Böcker"); 

错误:InvalidOperationException

private void btn1_Click(object sender, EventArgs e) 
    { 

     { 
      string sqlQuery = "SELECT Fält2, Fält3 FROM Böcker WHERE Fält2 = " + "'\\" + txt1.Text + "\\'"; 
      oleDbDataAdapter1.SelectCommand.CommandText = sqlQuery; 
      dataSet1.Clear(); 
       oleDbConnection1.Open(); 
      int numberOfRowsFeched = oleDbDataAdapter1.Fill(dataSet1, "Böcker"); 
      if (numberOfRowsFeched > 0) 
      { 
       DataTable dt = dataSet1.Tables["Böcker"]; 
       lbl1.Text = dt.Rows[0][0].ToString() + " " + 
       dt.Rows[0][1].ToString(); 
       lbl2.Text = dt.Rows[0][2].ToString(); 
      } 
      else 
      { 
       lbl1.Text = "Boken hittades inte."; 
       lbl1.Text = ""; 
      } 
     } 
    } 
} 

新的代码我使用:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Data.Sql; 
using System.Data.OleDb; 
using System.Data.SqlClient; 

namespace MySQL 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void btn1_Click(object sender, EventArgs e) 
     { 
      string ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\cetin.cigel\\databasbibliotek.mdb;User Id=admin;Password=;"; 
      string SqlString = "SELECT Fält1, Fält2, Fält3 FROM Böcker WHERE Fält2 = ?"; 
      using (OleDbConnection conn = new OleDbConnection(ConnString)) 
      { 
       using (OleDbDataAdapter da = new OleDbDataAdapter(SqlString, conn)) 
       { 
        da.SelectCommand.Parameters.AddWithValue("Fält2", txt1.Text); 
        DataTable dt = dataSet1.Tables["Böcker"]; 
        da.Fill(dt); 
        if (dt.Rows.Count > 0) 
        { 
         string text = string.Format("{0} {1}", 
          dt.Rows[0].Field<string>(0), 
          dt.Rows[0].Field<string>(1)); 
         lbl1.Text = text; 
         lbl2.Text = dt.Rows[0].Field<string>(2); 
        } 
        else 
        { 
         lbl1.Text = "Boken hittades inte."; 
        } 
       } 
      } 
     } 
    } 
} 
+3

您刚刚张贴的异常类型。消息和堆栈跟踪是什么? – 2013-02-11 09:24:30

回答

0

尝试更改表名称,它可能是与编码问题。 也,你会发现这个有用:http://www.alinq.org/

,并请张贴所有异常,使人们可以帮助:)

+3

这不是真的答案,因为你不知道这个例外。 – jAC 2013-02-11 09:35:34

0

我假设你正在试图打开仍然是开放的连接。

OleDbConnection.Open Method

InvalidOperationException : The connection is already open.

  • 使用using语句来确保一切都被置于/关闭尽快。你没有关闭连接,这是一个坏主意,当使用连接池(默认)
  • 你试图访问三个字段,但只在查询中选择两列?
  • ,不要串联SQL查询,使用参数,而不是:

string SqlString = "SELECT Fält1, Fält2, Fält3 FROM Böcker WHERE Fält2 = ?"; 
using (OleDbConnection conn = new OleDbConnection(ConnString)) 
{ 
    using (OleDbDataAdapter da = new OleDbDataAdapter(SqlString, conn)) 
    { 
     da.SelectCommand.Parameters.AddWithValue("Fält2", txt1.Text); 
     DataTable dt = dataSet1.Tables["Böcker"]; 
     da.Fill(dt); 
     if (dt.Rows.Count > 0) 
     { 
      string text = string.Format("{0} {1}", 
       dt.Rows[0].Field<string>(0), 
       dt.Rows[0].Field<string>(1)); 
      lbl1.Text = text; 
      lbl2.Text = dt.Rows[0].Field<string>(2); 
     } 
     else 
     { 
      lbl1.Text = "Boken hittades inte."; 
     } 
    } 
} 
+0

http://pastebin.com/f2TKiYdt&http://i.imgur.com/RlxZwOR.png – janitso 2013-02-11 09:33:43

+0

你能翻译错误吗?我假设它说“selectcommand.connection属性尚未初始化。”? – jAC 2013-02-11 09:39:01

+0

是的,它是正确的。它尚未初始化。 – janitso 2013-02-11 09:41:05