Excel 到 SQL Server Express on c# button click
Excel to SQL Server Express on c# button click
单击按钮我正在尝试将 excel 文件导出到 SQL 服务器 table。首先,我创建了我的第一个按钮,它会在单击时创建 table:
private void button1_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=LPMSW09000012JD\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
string query = "CREATE TABLE [dbo].[" + textBox1.Text + "](" + "[Code] [varchar] (7) NOT NULL," +
"[Description] [varchar] (38) NOT NULL," + "[NDC] [varchar] (12) NULL, " +
"[Supplier Code] [varchar] (38) NOT NULL," + "[UOM] [varchar] (8) NULL," + "[Size] [varchar] (8) NULL,)";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(query, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
我的下一个功能应该是通过OpenFileDialog
抓取excel文件,select然后将相关内容上传到table从我的按钮创建点击 above.This 是函数的重要部分:
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog ope = new OpenFileDialog();
ope.Filter = "Excel Files |*.xlsx;*.xlsm";
if (ope.ShowDialog() == DialogResult.Cancel)
return;
FileStream stream = new FileStream(ope.FileName, FileMode.Open);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
DataSet result = excelReader.AsDataSet();
DataClasses1DataContext conn = new DataClasses1DataContext();
foreach (DataTable table in result.Tables)
{
foreach (DataRow dr in table.Rows)
{
test addtable = new test()
{
test_id = Convert.ToString(result[0]);
test_name = Convert.ToString(dr[1]);
};
conn.tests.inInsertOnSubmit(addtable);
}
}
}
我的问题是它可以工作,但目前只有当我使用我的 c# 代码创建与我第一次单击按钮时创建的 table 建立关系时它才能工作。例如。假设我的 SQL 服务器 table 中有标题为 "test_id" 和 "test_name" 的列名。然后我必须抓住那个 table,放入我的 C# 代码并匹配列名。这将非常不方便,因为我的目标是用户单击按钮创建 table,然后每次他们想要从某些记录中读取数据时导出到该 table。我想消除数据库管理员的交互。我想做的是创建一个 table 并将一个 excel 文件导出到同一个 table,而不必在我的代码中事先创建某种关系。附加信息:所有单独的 excel 工作表每次都将具有相同的列集。保持不变。不知道有没有帮助
对于可能遇到此问题的任何人,我终于让它工作了。我所做的只是将我的文件类型更改为 .csv 文件而不是 excel 扩展名。 Excel 问题太多了。以下是单击按钮后导出到 MSSQL table 的函数:
private void button2_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=LPMSW09000012JD\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True");
string filepath = textBox2.Text; //"C:\Users\jdavis\Desktop\CRF_105402_New Port Maria Rx.csv";
StreamReader sr = new StreamReader(filepath);
string line = sr.ReadLine();
string[] value = line.Split(',');
DataTable dt = new DataTable();
DataRow row;
foreach (string dc in value)
{
dt.Columns.Add(new DataColumn(dc));
}
while (!sr.EndOfStream)
{
value = sr.ReadLine().Split(',');
if (value.Length == dt.Columns.Count)
{
row = dt.NewRow();
row.ItemArray = value;
dt.Rows.Add(row);
}
}
SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock);
bc.DestinationTableName = textBox1.Text;
bc.BatchSize = dt.Rows.Count;
con.Open();
bc.WriteToServer(dt);
bc.Close();
con.Close();
}
单击按钮我正在尝试将 excel 文件导出到 SQL 服务器 table。首先,我创建了我的第一个按钮,它会在单击时创建 table:
private void button1_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=LPMSW09000012JD\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
string query = "CREATE TABLE [dbo].[" + textBox1.Text + "](" + "[Code] [varchar] (7) NOT NULL," +
"[Description] [varchar] (38) NOT NULL," + "[NDC] [varchar] (12) NULL, " +
"[Supplier Code] [varchar] (38) NOT NULL," + "[UOM] [varchar] (8) NULL," + "[Size] [varchar] (8) NULL,)";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(query, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
我的下一个功能应该是通过OpenFileDialog
抓取excel文件,select然后将相关内容上传到table从我的按钮创建点击 above.This 是函数的重要部分:
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog ope = new OpenFileDialog();
ope.Filter = "Excel Files |*.xlsx;*.xlsm";
if (ope.ShowDialog() == DialogResult.Cancel)
return;
FileStream stream = new FileStream(ope.FileName, FileMode.Open);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
DataSet result = excelReader.AsDataSet();
DataClasses1DataContext conn = new DataClasses1DataContext();
foreach (DataTable table in result.Tables)
{
foreach (DataRow dr in table.Rows)
{
test addtable = new test()
{
test_id = Convert.ToString(result[0]);
test_name = Convert.ToString(dr[1]);
};
conn.tests.inInsertOnSubmit(addtable);
}
}
}
我的问题是它可以工作,但目前只有当我使用我的 c# 代码创建与我第一次单击按钮时创建的 table 建立关系时它才能工作。例如。假设我的 SQL 服务器 table 中有标题为 "test_id" 和 "test_name" 的列名。然后我必须抓住那个 table,放入我的 C# 代码并匹配列名。这将非常不方便,因为我的目标是用户单击按钮创建 table,然后每次他们想要从某些记录中读取数据时导出到该 table。我想消除数据库管理员的交互。我想做的是创建一个 table 并将一个 excel 文件导出到同一个 table,而不必在我的代码中事先创建某种关系。附加信息:所有单独的 excel 工作表每次都将具有相同的列集。保持不变。不知道有没有帮助
对于可能遇到此问题的任何人,我终于让它工作了。我所做的只是将我的文件类型更改为 .csv 文件而不是 excel 扩展名。 Excel 问题太多了。以下是单击按钮后导出到 MSSQL table 的函数:
private void button2_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=LPMSW09000012JD\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True");
string filepath = textBox2.Text; //"C:\Users\jdavis\Desktop\CRF_105402_New Port Maria Rx.csv";
StreamReader sr = new StreamReader(filepath);
string line = sr.ReadLine();
string[] value = line.Split(',');
DataTable dt = new DataTable();
DataRow row;
foreach (string dc in value)
{
dt.Columns.Add(new DataColumn(dc));
}
while (!sr.EndOfStream)
{
value = sr.ReadLine().Split(',');
if (value.Length == dt.Columns.Count)
{
row = dt.NewRow();
row.ItemArray = value;
dt.Rows.Add(row);
}
}
SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock);
bc.DestinationTableName = textBox1.Text;
bc.BatchSize = dt.Rows.Count;
con.Open();
bc.WriteToServer(dt);
bc.Close();
con.Close();
}