(Kompletne rozwiązanie dla programistów C# przy użyciu programu budującego polecenia)
Przede wszystkim musisz znać te fakty: - W żadnym wypadku nie możesz modyfikować kolumny tożsamości, więc musisz usunąć wiersz i dodać go ponownie z nowym identyfikatorem. -Nie można usunąć właściwości tożsamości z kolumny (trzeba by usunąć do kolumny) - Niestandardowy program budujący polecenia z .net zawsze pomija kolumnę tożsamości, więc nie można jej używać w tym celu.
Tak więc, wiedząc o tym, co musisz zrobić, to. Albo zaprogramuj własną instrukcję SQL Insert, albo program, który posiadasz własny builder poleceń. Lub użyj tej, którą zaprogramowałem dla ciebie. Biorąc pod uwagę DatatTable, generuje skrypt SQL Insert:
public static string BuildInsertSQLText (DataTable table)
{
StringBuilder sql = new StringBuilder(1000,5000000);
StringBuilder values = new StringBuilder ("VALUES (");
bool bFirst = true;
bool bIdentity = false;
string identityType = null;
foreach(DataRow myRow in table.Rows)
{
sql.Append("\r\nINSERT INTO " + table.TableName + " (");
foreach (DataColumn column in table.Columns)
{
if (column.AutoIncrement)
{
bIdentity = true;
switch (column.DataType.Name)
{
case "Int16":
identityType = "smallint";
break;
case "SByte":
identityType = "tinyint";
break;
case "Int64":
identityType = "bigint";
break;
case "Decimal":
identityType = "decimal";
break;
default:
identityType = "int";
break;
}
}
else
{
if (bFirst)
bFirst = false;
else
{
sql.Append (", ");
values.Append (", ");
}
sql.Append ("[");
sql.Append (column.ColumnName);
sql.Append ("]");
//values.Append (myRow[column.ColumnName].ToString());
if (myRow[column.ColumnName].ToString() == "True")
values.Append("1");
else if (myRow[column.ColumnName].ToString() == "False")
values.Append("0");
else
if(myRow[column.ColumnName] == System.DBNull.Value)
values.Append ("NULL");
else
if(column.DataType.ToString().Equals("System.String"))
{
values.Append ("'"+myRow[column.ColumnName].ToString()+"'");
} else
values.Append (myRow[column.ColumnName].ToString());
//values.Append (column.DataType.ToString());
}
}
sql.Append (") ");
sql.Append (values.ToString());
sql.Append (")");
if (bIdentity)
{
sql.Append ("; SELECT CAST(scope_identity() AS ");
sql.Append (identityType);
sql.Append (")");
}
bFirst = true;
sql.Append(";");
values = new StringBuilder ("VALUES (");
}//fin foreach
return sql.ToString(); ;
}
DBCC Zresetuj następny nowy rekord, ale co chcę teraz zmienić istniejące rekordy. –
czy możesz podać przykład, proszę? –
Sheesh to uratowało mnie ... – TheGeekZn