[英]insert into ms access db from another database with c# code
我使用以下代碼將一個記錄從一個數據庫插入另一個數據庫,但是它不起作用。 我在MS-ACCESS 2007
嘗試了該查詢,它工作正常,但從C#
代碼以編程方式調用時卻不起作用?
string query_insert = "INSERT INTO Questionnaires_Table(BranchName,Factor,Region,Branch_ID,Current_Date,No_Employees) "
+ "SELECT BranchName,Factor,Region,Branch_ID,Current_Date,No_Employees "
+ "FROM Questionnaires_Table IN '" + dialog.FileName + "' Where Branch_ID = " + textBox1.Text ;
dbConnDest.Open();
OleDbDataAdapter dAdapter = new OleDbDataAdapter();
OleDbCommand cmd_insert = new OleDbCommand(query_insert, dbConnDest);
dAdapter.InsertCommand = cmd_insert;
cmd_insert.ExecuteNonQuery();
dbConnDest.Close();
當我在ms Access中獲取query_insert
的內容時,它工作正常
它拋出
在cmd_insert.ExecuteNonQuery();行中插入INSTO INTO語法錯誤異常
編輯
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Title = "select database";
if ((dialog.ShowDialog() == DialogResult.OK) && (textBox1.Text == ""))
{
MessageBox.Show("insert reference year", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
OleDbConnection dbConnDest;
dbConnDest = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Users\SystemA.accdb;Persist Security Info=False;");
try
{
string query_insert = "INSERT INTO Questionnaires_Table(BranchName,Factor,Region,Branch_ID,Current_Date,No_Employees) "
+ "SELECT BranchName,Factor,Region,Branch_ID,Current_Date,No_Employees "
+ "FROM Questionnaires_Table1 IN '" + dialog.FileName + "' Where ReferenceYear = " + textBox1.Text + ";";
dbConnDest.Open();
OleDbCommand cmd_insert = new OleDbCommand(query_insert, dbConnDest);
try
{
cmd_insert.ExecuteNonQuery();
}
catch (Exception g)
{
MessageBox.Show(g.ToString());
}
textBox2.Text = query_insert.ToString();
dbConnDest.Close();
}
catch (Exception h)
{
MessageBox.Show(h.ToString());
}
}
}
}
}
編輯
您在query_insert中缺少“值”關鍵字。
我在此Microsoft論壇中發現了不同的語法
INSERT INTO [AccessTable] SELECT * FROM [MS Access;DATABASE=D:\My Documents\db2.mdb].[Table2]
所以你可以試試這個
string query_insert = "INSERT INTO Questionnaires_Table " +
"(BranchName,Factor,Region,Branch_ID,[Current_Date],No_Employees) " +
"SELECT BranchName,Factor,Region,Branch_ID,[Current_Date],No_Employees " +
"FROM [MS Access;DATABASE=" + dialog.FileName + "].Questionnaires_Table " +
"Where Branch_ID = @branch";
dbConnDest.Open();
OleDbCommand cmd_insert = new OleDbCommand(query_insert, dbConnDest);
cmd_insert.Parameters.AddWithValue("@branch", textBox1.Text);
cmd.ExecuteNonQuery();
使用"Provider=Microsoft.ACE.OLEDB.12.0;"
但是,隨着更多的研究,很明顯,給出的語法錯誤是由於存在保留關鍵字 CURRENT_DATE。 可以解決此問題,用方括號將字段名稱封裝起來。
順便說一下,一旦解決了CURRENT_DATE的問題,IN語法也可以正常工作。
我對ms訪問查詢不是很熟悉,但我認為您不應該使用OleDbDataAdapter。 該代碼應類似於以下內容:
string query_insert = "INSERT INTO Questionnaires_Table(BranchName,Factor,Region,Branch_ID,Current_Date,No_Employees) "
+ "SELECT BranchName,Factor,Region,Branch_ID,Current_Date,No_Employees "
+ "FROM Questionnaires_Table IN '" + dialog.FileName + "' Where Branch_ID = " + textBox1.Text ;
dbConnDest.Open();
OleDbCommand cmd_insert = new OleDbCommand(query_insert, dbConnDest);
cmd_insert.ExecuteNonQuery();
dbConnDest.Close();
就像其他人說的那樣,這就是SQL語法問題。 您缺少VALUES關鍵字,請看:
INSERT INTO TABLENAME (COL1, COL2, COL2) VALUES (VAL1, VAL2, VAL3)
您的VALUES關鍵字在哪里?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.