2011-12-24 88 views
2

我试图做一个简单的测试程序,它可以打开MDB文件和做3个基本的东西 的MDB有3场,个个都是文本:插入和更新数据,MDB

ID 
INFO 
TEXT 
  • 表示acording到ID数据=根据ID得到这个工作
  • 改变数据=问题
  • 添加新数据=问题

显示数据与此代码的工作:

con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = c:\\mdb\\testmdb.mdb"); 
cmd = new OleDbCommand(); 
cmd.Connection = con; 
cmd.CommandText = "select Info, text from Table1 where ID = '" + int.Parse(textBox1.Text) + "' "; 
con.Open(); // open the connection 
OleDbDataReader dr = cmd.ExecuteReader(); 
while (dr.Read()) 
{ 
    textBox2.Text = dr["Info"].ToString(); 
    textBox3.Text = dr["text"].ToString(); 
} 
con.Close(); 

如何在MDB和我已经有更新的数据插入新的数据?

回答

1

尝试此插入:

con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = c:\\mdb\\testmdb.mdb"); 
cmd = new OleDbCommand(); 
cmd.Connection = con; 
cmd.CommandText = "insert (ID, Info, text) into Table1 values (@ID, @Info, @text);"; 
cmd.Parameters.AddWithValue("@ID", textBox1.Text); 
cmd.Parameters.AddWithValue("@Info", textBox2.Text); 
cmd.Parameters.AddWithValue("@text", textBox3.Text); 
con.Open(); // open the connection 
//OleDbDataReader dr = cmd.ExecuteNonQuery(); 
cmd.ExecuteNonQuery(); 
con.Close(); 

尝试此更新:

con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = c:\\mdb\\testmdb.mdb"); 
cmd = new OleDbCommand(); 
cmd.Connection = con; 
cmd.CommandText = "update Table1 set [Info] = @Info, [text] = @text where ID = @ID;"; 
cmd.Parameters.AddWithValue("@ID", textBox1.Text); 
cmd.Parameters.AddWithValue("@Info", textBox2.Text); 
cmd.Parameters.AddWithValue("@text", textBox3.Text); 
con.Open(); // open the connection 
//OleDbDataReader dr = cmd.ExecuteNonQuery(); 
cmd.ExecuteNonQuery(); 
con.Close(); 

更多操作,检查的this网站左侧面板中。

+0

它可能考虑使用最佳实践使用'{}'括号现在。此外,您不需要这些数据读取器,只需调用'cmd.ExecuteNonQuery();' – LarsTech 2011-12-24 17:00:05

+0

错误不能将类型'int'隐式转换为'System.Data.OleDb.OleDbDataReader' – Iakovl 2011-12-24 17:09:33

+0

ExecuteNonQuery的返回值是一个int,将这些'OleDbDataReader dr'行转换为'int numAffected',并且它应该可以正常工作 – Petesh 2011-12-24 17:31:58

0

工作代码

using System; 
using ADOX; 
using System.Data.OleDb; 
using System.Data; 
using System.IO; 

namespace ConsoleApplication4 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     CreateMdb("toster_ru.mdb"); 
     string fileNameWithPath = Environment.CurrentDirectory + "\\toster_ru.mdb"; 

     CreateTableInToMdb(fileNameWithPath); 
     InsertToMdb(fileNameWithPath); 
     UpdateToMdb(fileNameWithPath); 

     var myDataTable = new DataTable(); 
     using (var conection = new OleDbConnection("Provider = Microsoft.JET.OLEDB.4.0; Data Source = " + fileNameWithPath)) 
     { 
      conection.Open(); 
      var query = "Select info From my_table"; 
      var adapter = new OleDbDataAdapter(query, conection); 
      adapter.Fill(myDataTable); 
      Console.WriteLine(myDataTable.Rows[0][0].ToString()); //output: toster2.ru 
      Console.ReadKey(); 
     } 
    } 

    static void CreateMdb(string fileNameWithPath) 
    { 
     if (File.Exists(fileNameWithPath)) 
      return; 

     Catalog cat = new Catalog(); 
     string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5"; 
     cat.Create(String.Format(connstr, fileNameWithPath)); 
     cat = null; 
    } 

    static void InsertToMdb(string fileNameWithPath) 
    { 
     var con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + fileNameWithPath); 
     var cmd = new OleDbCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = "insert into my_table (ID, [Info], [text]) values (@ID, @Info, @text);"; 
     cmd.Parameters.AddWithValue("@ID", 1); 
     cmd.Parameters.AddWithValue("@Info", "toster.ru"); 
     cmd.Parameters.AddWithValue("@text", "blabla"); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 

    static void UpdateToMdb(string fileNameWithPath) 
    { 
     var con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + fileNameWithPath); 
     var cmd = new OleDbCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = "UPDATE my_table SET [Info] = ?, [text] = ? WHERE ID = ?;"; 
     cmd.Parameters.AddWithValue("@p1", OleDbType.VarChar).Value = "toster2.ru"; 
     cmd.Parameters.AddWithValue("@p2", OleDbType.VarChar).Value = "blabla2"; 
     cmd.Parameters.AddWithValue("@p3", OleDbType.VarNumeric).Value = 1; 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 

    static void CreateTableInToMdb(string fileNameWithPath) 
    { 
     try 
     { 
      OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + fileNameWithPath); 
      myConnection.Open(); 
      OleDbCommand myCommand = new OleDbCommand(); 
      myCommand.Connection = myConnection; 
      myCommand.CommandText = "CREATE TABLE my_table([ID] NUMBER, [Info] TEXT, [text] TEXT)"; 
      myCommand.ExecuteNonQuery(); 
      myCommand.Connection.Close(); 
     } 
     catch { } 
    } 
} 
}