Я пытаюсь запустить оператор вставки в DataTable (я делаю это таким образом, чтобы все функции в операторе будут выполнены таким образом я могу получить предполагаемые значения)заявления Вставить в DataTable
private void insertintoDT(DataTable destination, string InsertStatement)
{
SqlCommand comm = new SqlCommand(InsertStatement);
SqlDataReader reader = new SqlDataReader();
destination.Load(reader);
}
}
Этот DataTable будет загружен в DataGrid, чтобы я мог видеть значения, которые будут вставлены. Я попытался разбивая заявление вставки как так:
private void breakupInsert(String insert)
{
DataTable dt = new DataTable();
dgvInsert.Rows.Clear();
string stemp = insert;
int len = stemp.Length;
int itemp = 0;
stemp = stemp.Remove(0, 12);
itemp = stemp.IndexOf("VALUES") - 1;
gvtable = stemp.Substring(0, itemp);
stemp = stemp.Remove(0, itemp + 9);
int itemcount = stemp.Count(x => x == ',') + 1;
string[] values = new string[itemcount - 1];
//populate values
int h = 0;//Used as a start index
int itemc = 0; //item index
for (int k = 0; k < stemp.Length; k++)
{
if (k == stemp.Length - 2)
{
values[itemc] = ExecuteSQL(stemp.Substring(h, (k + 1) - h));
break;
}
else
if (stemp.Substring(k, 2) == (", "))
{
itemp = stemp.IndexOf(", ");
values[itemc] = ExecuteSQL(stemp.Substring(h, k - h));
h = k + 2;
itemc = itemc + 1;
k = k + 1;
}
else if (stemp.Substring(k, 2) == ("),"))
{
itemp = stemp.IndexOf("),");
values[itemc] = ExecuteSQL(stemp.Substring(h, k - h));
h = k + 2;
itemc = itemc + 1;
k = k + 1;
}
else if (stemp.Substring(k, 2) == ("',"))
{
itemp = stemp.IndexOf("',");
values[itemc] = ExecuteSQL(stemp.Substring(h, (k - h) + 1));
h = k + 2;
itemc = itemc + 1;
k = k + 1;
}
}
for (int j = 0; j < values.Length; j++)
{
this.dgvInsert.Rows.Insert(j, j + 1, values[j], values[j].Length);
}
}
Однако это нарушает, когда функция в операторе вставки (литая, например)
Есть ли способ сделать это, или это проигранное дело ?
уточнить: Я по существу пытается предоставить пользователю текстовое поле, которое они могут вставить оператор SQL в это утверждение будет отражаться в сетке. Поэтому, если вставляется оператор insert, то datatable будет отображать значения, которые вставляются. Но без добавления их в базу данных.
было бы лучше вставить одну строку за раз –
Также я не вижу, чтобы вы открывали и закрывали соединение с сервером. И вы можете использовать sqlcommand.parameters –
Я все еще строю процедуру для импорта в datatable, я хотел посмотреть, возможно ли это, даже не делая вызов в базу данных. – Darkestlyrics