【问题标题】:Save a DataTable into a database table将 DataTable 保存到数据库表中
【发布时间】:2011-09-02 07:38:33
【问题描述】:

我正在从我的应用程序生成一个数据表,我想将整个数据表保存到一个数据库表中。

DataTable ds = //add the info from the queue in the application

DataTable 正在生成,但是接下来要做什么。告诉我一些语法。我也不需要 select 语句,我只想将 DataTable 中的所有信息插入到已经创建的 db 表中(更新表) . 我将使用 ODBC 连接来访问 MYSQL 数据库

我想直接通过dataset将数据更新到数据库中

public void update(DataTable ds)
{
  try
  {  
    lock (myLockHolder)
    {
      X1 = 1;
      OdbcConnection con = 
      new OdbcConnection(LocalConnection.GetLocalConnetionString());
      OdbcCommand cmd;
      OdbcDataAdapter da;
      DataSet ds1=new DataSet();
      string query = "";
      query = "update parameter" + Environment.NewLine;
      query += "set paramvalue=paramvalue,date_logged1=date_logged1," 
        + Environment.NewLine;
      query += "  Quality=Quality,date_logged=date_logged" 
        + Environment.NewLine;
      query += " where itemID=itemID";
      cmd = new OdbcCommand(query, con);
      da = new OdbcDataAdapter(cmd);
      ds1=new DataSet();
      ds1.Tables.Add(ds);
      da.Update(ds1);                   

    }
  }
  catch { }
  finally { }
}

会像这个方法那样使用catch这个异常 “更新找不到 TableMapping['Table'] 或 DataTable 'Table'。”

【问题讨论】:

    标签: c# mysql .net datatable


    【解决方案1】:

    您应该创建插入 sql 字符串,遍历数据表中的所有行,为数据表中的每一列添加参数,然后执行此查询。

    string sql = "INSERT INTO T (A, B, C) VALUES (@A, @B, @C)"; 
    using (SqlConnection conn = new SqlConnection(connectionString))
    {   
       conn.Open();   
       foreach (DataRow r in myTable.Rows)   
       {      
           SqlCommand cmd = conn.CreateCommand();      
           cmd.CommandText = sql;      
           cmd.Parameters.AddWithValue("@A", r["A"]);      
           cmd.Parameters.AddWithValue("@B", r["B"]);      
           cmd.Parameters.AddWithValue("@C", r["C"]);      
           cmd.ExecuteNonQuery();   
       }
    }
    

    【讨论】:

    • 这很难看,但有点工作:) 除了它没有从一开始就清除表格。
    【解决方案2】:

    你写道:>我想要没有 foreach 循环

    尝试使用dotConnect for MySQL 中的MySqlDataTable 类。阅读有关 MySqlDataTable.Update() 方法和 MySqlDataTable.CachedUpdates 状态的更多信息。

    【讨论】:

    【解决方案3】:
    using (SqlConnection conn = new SqlConnection(connectionString))
    {   
      conn.Open();  
      foreach (DataRow r in dataTable2.Rows)
      {
        string sql = "INSERT INTO BALREP (ACODE, ANAME, QTY) VALUES ('" +r["CODE"] + "', '" + r["NAME"] + "', '" + r["CELL"] + "')";
        SqlCommand cmd2 = con.CreateCommand();
        cmd.CommandText = sql;
        cmd.ExecuteNonQuery();
      }
    }
    

    【讨论】:

    • 这很容易受到 SQL 注入的影响,应该避免。
    【解决方案4】:
    dt.Rows.Clear();
            try { 
            SqlConnection con = new SqlConnection(ConnectDb.connectionstring);
    
            SqlDataAdapter adp = new SqlDataAdapter("SELECT * FROM Admission",con);
            con.Open();
            adp.Fill(dt);
    
            SqlConnection con2 = new SqlConnection(ConnectDb.onlinestring);
            con2.Open();
    
    
            foreach (DataRow r in dt.Rows)
            {
                SqlCommand check_User_Name = new SqlCommand("SELECT COUNT(*) FROM [Admission] WHERE ([studentName] = @SName)", con2);
                check_User_Name.Parameters.AddWithValue("@SName", r["studentName"]);
                int UserExist = (int)check_User_Name.ExecuteScalar();
    
                if (UserExist > 0)
                {
                    //Username exist
                    //MessageBox.Show("User Name is Already here");
    
                }
                else {
                SqlCommand cmd = new SqlCommand("INSERT INTO Admission(studentName, age, class, subject)VALUES(@name, @age, @class, @subject)", con2);
                cmd.Parameters.AddWithValue("@name", r["studentName"]);
                cmd.Parameters.AddWithValue("@age", r["age"]);
                cmd.Parameters.AddWithValue("@class", r["class"]);
                cmd.Parameters.AddWithValue("@subject", r["subject"]);
                cmd.ExecuteNonQuery(); 
            }
    
            }
                }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多