У меня есть эта функция, которая создает таблицу, а затем получает файл CSV. Мне нужен столбец идентификатора, который автоматически увеличивается, что будет использоваться для последующего использования. Поэтому я выполнил указанный ниже запрос с полем ID. Прежде чем он не работал, потому что изначально в файле CSV не было столбца идентификатора, поэтому, когда пришло время его отправки в базу данных, произошла ошибка. Поэтому моя следующая идея заключалась в том, чтобы добавить пустой столбец идентификатора без значений в файл CSV, а затем снова выполнить запрос. Все еще проблема. Ошибка в моем коде C#: «Получена недопустимая длина столбца от клиента bcp для colid 1.» Который догадывается, это столбец идентификатора. Есть ли способ, чтобы этот столбец идентификатора вставлен и автоматически увеличивался в одно и то же время?Импорт CSV-файла в SQL Server с использованием SqlBulkCopy
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();
}
Кол-во столбцов sh ould будет автоматически создан для вас, и вы не будете вставлять что-либо в него. Какой именно код не работал, когда вы пытаетесь сделать первый шаг - сосредоточьтесь на этом - это должно работать нормально. – Hogan
То же самое 'Получено недопустимое значение длины столбца из bcp-клиента для colid 1.' – Jevon
Эта ссылка может помочь: http://stackoverflow.com/questions/6651809/sqlbulkcopy-insert-with-identity-column С нормальной вставкой, вы не добавляете столбец автоматической идентификации в «DataTable» вообще - база данных не нуждается в нем, если вы не укажете, что хотите указать явные значения. –