Если вы имели в виду использование CsvHelper.Да, это может быть сделано.Я смог протестировать ваш сценарий и смог проверить атрибут SOMESTRING = NULL при использовании Microsoft SQL Server Management Studio 2014. В моем примере, используя CsvHelper, преобразовать файл CSV в DataTable, а затем преобразовать любое пустое поле в DBNull.Значение.Вставка измененного DataTable в базу данных с использованием хранимой процедуры базы данных и с использованием пользовательских типов таблиц Наконец, чтение из базы данных -> DataTable и просмотр записей в DataGridView.Вы заметите, что пустые поля имеют значение NULL.
Создайте ТИП
CREATE TYPE [dbo].[MyProductTableType] AS TABLE(
[ID] [nvarchar](5) NOT NULL,
[SOMETHING] [nvarchar](128) NULL
)
Создайте процедуру:
CREATE PROCEDURE [dbo].[InsertTable]
@myTableType MyProductTableType readonly
AS
BEGIN
insert into [dbo].PRODUCTS select * from @myTableType
END
Код C # при использовании DataGridView и командной кнопки наWindows.Forms
using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using System.Data.SqlClient;
using CsvHelper;
using System.IO;
namespace Stack_Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var path = @"C:\Temp\MYTABLE.csv";
DataTable dt = readCSV(path);
foreach(DataRow row in dt.Rows)
{
foreach(DataColumn col in dt.Columns)
{
if (row.Field<String>(col) == String.Empty)
{
row.SetField(col, DBNull.Value); //row.SetField(col, "NULL"); // Or set the value to any string value of your choice
}
}
}
SqlConnection conn = new SqlConnection("Your SQL Connection String");
using (var command = new SqlCommand("InsertTable", conn) { CommandType = CommandType.StoredProcedure })
{
command.Parameters.Add(new SqlParameter("@myTableType", dt));
command.Connection.Open();
command.ExecuteNonQuery();
command.Dispose();
dt.Clear();
}
using(var command = new SqlCommand("Select * from PRODUCTS", conn) { CommandType = CommandType.Text})
{
SqlDataReader rdr = command.ExecuteReader();
dt.Load(rdr);
dataGridView1.DataBindings.Clear();
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
dt.Dispose();
command.Dispose();
conn.Close();
conn.Dispose();
}
} // End button1_Click
с использованием CsvHelper
public DataTable readCSV(string filePath)
{
var dt = new DataTable();
var csv = new CsvReader(new StreamReader(filePath));
// Creating the columns
typeof(Product).GetProperties().Select(p => p.Name).ToList().ForEach(x => dt.Columns.Add(x));
// Adding the rows
csv.GetRecords<Product>().ToList().ForEach(line => dt.Rows.Add(line.ID, line.SOMETHING));
return dt;
} // End readCSV : DataTable
Объект класса
public class Product
{
public string ID { get; set; }
public string SOMETHING { get; set; }
} // End class Product
SQL Server - Снимок результата БД