2016-11-23 14 views
0

CでデータベースにデータグリッドビューでExcelからインポートしたデータを保存する方法 レコードを保存してExcelシートにエクスポートしました。データIDと共にエクスポートされました。 excelのdatagridviewに戻る。今私はデータベースにデータを保存したい。 SQLコンパクトな3.5 DataGridViewNameがRecordsDataGridViewあるを使用してインポートされたexcelをデータベースCに保存する方法

データベース名 "Records.sdfを":知っておくことが重要

enter image description here

次のコードを使用していますが、動作しません。有効ではない 列名を受信

public void SaveData() 
    { 
     // Save the data. 

     SqlCeConnection conn = 
       new SqlCeConnection(
        @"Data Source=|DataDirectory|\Records.sdf;Persist Security Info=False"); 

     SqlCeCommand com; 
     string str; 
     conn.Open(); 
     for (int index = 0; index < RecordsDataGridView.Rows.Count - 1; index++) 
     { 
      str = @"Insert Into OutgoingChequeRecords(ID,BankName,Date,AccountNo, Chequebook, ChequeNo, Payee, Amount, Remarks) Values(" + RecordsDataGridView.Rows[index].Cells[0].Value.ToString() + ", '" + RecordsDataGridView.Rows[index].Cells[1].Value.ToString() + "'," + RecordsDataGridView.Rows[index].Cells[2].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[3].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[4].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[5].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[6].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[7].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[8].Value.ToString() + ")"; 
      com = new SqlCeCommand(str, conn); 
      com.ExecuteNonQuery(); 
     } 
     conn.Close(); 
    } 

ERROR、列名=現金

+1

一部の列の値がありません!受取人(列インデックス6およびその他のテキスト列)の間に値をラップする必要があります – Emanuele

+0

日付が0、列2として保存されているようにしてください – Patrick

+0

すべての値には書式が必要です。パラメータを使用する!テーブル(列)の値(@value)に挿入し、パラメータを設定します。日付の形式はわかりません。 – Emanuele

答えて

1

これを行うには、いくつかの方法があります

str = @"Insert Into OutgoingChequeRecords(ID,BankName,Date,AccountNo, Chequebook, ChequeNo, Payee, Amount, Remarks) Values(" + RecordsDataGridView.Rows[index].Cells[0].Value.ToString() + ",'"+ RecordsDataGridView.Rows[index].Cells[1].Value.ToString() + "'," + RecordsDataGridView.Rows[index].Cells[2].Value.ToString() + ",'" + RecordsDataGridView.Rows[index].Cells[3].Value.ToString() + "','" + RecordsDataGridView.Rows[index].Cells[4].Value.ToString() + "','" + RecordsDataGridView.Rows[index].Cells[5].Value.ToString() + "','" + RecordsDataGridView.Rows[index].Cells[6].Value.ToString() + "','" + RecordsDataGridView.Rows[index].Cells[7].Value.ToString() + "','" + RecordsDataGridView.Rows[index].Cells[8].Value.ToString() + "')"; 
+0

作業中ですが、1行しか保存されませんでした。 – Patrick

+0

インデックスを0に、RecordsDataGridView.Rows.Countを-1にして、RecordsDataGridView.Rows.Countに変更しました。 – Patrick

+0

ok日付はまだ問題です。 – Patrick

1

あなたは、単一引用符で囲まれたvarchar型のフィールドを渡す必要があります。

var str = @"Insert Into OutgoingChequeRecords(ID,BankName,Date,AccountNo, Chequebook, ChequeNo, Payee, Amount, Remarks) Values(" 
         + RecordsDataGridView.Rows[index].Cells[0].Value.ToString() + ", '" 
         + RecordsDataGridView.Rows[index].Cells[1].Value.ToString() + "'," 
         + RecordsDataGridView.Rows[index].Cells[2].Value.ToString() + "," 
         + RecordsDataGridView.Rows[index].Cells[3].Value.ToString() + "," 
         + RecordsDataGridView.Rows[index].Cells[4].Value.ToString() + "," 
         + RecordsDataGridView.Rows[index].Cells[5].Value.ToString() + "," 
         + "'" + RecordsDataGridView.Rows[index].Cells[6].Value.ToString() + "'" + "," 
         + RecordsDataGridView.Rows[index].Cells[7].Value.ToString() + "," 
         + "'" + dataGridView1.Rows[index].Cells[8].Value.ToString() + "'" + ")"; 
+0

日付は0、列2として保存されます。 – Patrick

0

このクエリ文字列を試してみてください。

これは1つの方法です。

private void save_btn_Click(object sender, EventArgs e) 
{ 
    sAdapter.Update(sTable); 
    dataGridView1.ReadOnly = true; 
    save_btn.Enabled = false; 
    new_btn.Enabled = true; 
    delete_btn.Enabled = true; 
} 

http://csharp.net-informations.com/datagridview/csharp-datagridview-database-operations.htm

あなたにもこれを行うことができます。

string StrQuery; 
try 
{ 
    using (SqlConnection conn = new SqlConnection(ConnString)) 
    { 
     using (SqlCommand comm = new SqlCommand()) 
     { 
      comm.Connection = conn; 
      conn.Open(); 
      for(int i=0; i< dataGridView1.Rows.Count;i++) 
      { 
       StrQuery= @"INSERT INTO tableName VALUES (" 
        + dataGridView1.Rows[i].Cells["ColumnName"].Text+", " 
        + dataGridView1.Rows[i].Cells["ColumnName"].Text+");"; 
       comm.CommandText = StrQuery; 
       comm.ExecuteNonQuery(); 
      } 
     } 
    } 
} 

このようなものも機能します。

private void buttonSave_Click_1(object sender, EventArgs e) // save to invoice 
{ 
    SqlConnection con = new SqlConnection(MyConnectionString); 
    string SqlCmdText = "INSERT INTO invoice (p_code, p_name, p_category, p_price) " + 
            VALUES (@code, @name, @category, @price)"; 
    SqlCommand sc = new SqlCommand(SqlCmdText, con); 
    con.Open(); 
    foreach (DataRow row in MyTable.Rows) 
    { 
     sc.Parameters.Clear(); 
     sc.Parameters.AddWithValue("@code", row["p_code"]); 
     sc.Parameters.AddWithValue("@name", row["p_name"]); 
     sc.Parameters.AddWithValue("@category", row["p_category"]); 
     sc.Parameters.AddWithValue("@price", row["p_price"]); 
     sc.ExecuteNonQuery(); 
    } 
    con.Close(); 
} 
関連する問題