Jev*_*von 1 .net c# sql-server ado.net winforms
我有这个功能,创建一个表,然后接收一个CSV文件.我需要一个ID列,它会自动递增,以供以后使用.因此,我使用ID字段运行以下查询.在它无法工作之前,因为最初CSV文件没有ID列,所以当它被发送到数据库的时候会出现错误.所以我的下一个想法是在CSV文件中添加一个没有值的空白ID列,然后再次尝试查询.还有问题.我的c#代码中的错误是:"从colcp 1的bcp客户端收到无效的列长度." 我猜的是ID列.有没有办法插入此ID列并同时自动增加?
private void button2_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
string query = "CREATE TABLE [dbo].[" + textBox1.Text + "](" +"ID int IDENTITY (1,1) PRIMARY KEY," + "[Code] [varchar] (13) NOT NULL," +
"[Description] [varchar] (50) NOT NULL," + "[NDC] [varchar] (50) NULL," +
"[Supplier Code] [varchar] (38) 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();
}
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();
}
Run Code Online (Sandbox Code Playgroud)
我想你在SQL Server中有一个表,你用这种方式创建了一个表:
CREATE TABLE [dbo].[Table1] (
[Column1] INT IDENTITY (1, 1) NOT NULL,
[Column2] NVARCHAR (50) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
包含此类值的文件:
Column1,Column2
1,N1
2,N2
3,N3
Run Code Online (Sandbox Code Playgroud)
因此,要将值批量插入表中,您可以使用以下代码:
var lines = System.IO.File.ReadAllLines(@"d:\data.txt");
if (lines.Count() == 0) return;
var columns = lines[0].Split(',');
var table = new DataTable();
foreach (var c in columns)
table.Columns.Add(c);
for (int i = 1; i < lines.Count() - 1; i++)
table.Rows.Add(lines[i].Split(','));
var connection = @"your connection string";
var sqlBulk = new SqlBulkCopy(connection);
sqlBulk.DestinationTableName = "Table1";
sqlBulk.WriteToServer(table);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7774 次 |
| 最近记录: |