public static string CreateUpdateCommand(string TableName, string ConnectionString, params string[] KeyFieldNames)
{
string str = "";
try
{
SqlConnection sqlconn = new SqlConnection(ConnectionString);
SqlCommand sqlcomm = new SqlCommand("select * from " + TableName + " where 1 = 0 ", sqlconn);
sqlconn.Open();
SqlDataReader sdr = sqlcomm.ExecuteReader();
for (int i = 0; i < sdr.FieldCount; i++)
{
switch (sdr.GetDataTypeName(i).ToLower())
{
case "bigint": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.BigInt); break;
case "binary": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Binary); break;
case "bit": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Bit); break;
case "char": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Char); break;
case "date": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Date); break;
case "datetime": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.DateTime); break;
case "datetime2": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.DateTime2); break;
case "datetimeoffset": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.DateTimeOffset); break;
case "decimal": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Decimal); break;
case "float": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Float); break;
case "image": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Image); break;
case "int": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Int); break;
case "money": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Money); break;
case "nchar": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.NChar); break;
case "ntext": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.NText); break;
case "nvarchar": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.NVarChar); break;
case "real": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Real); break;
case "smalldatetime": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.SmallDateTime); break;
case "smallint": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.SmallInt); break;
case "smallmoney": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.SmallMoney); break;
case "structured": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Structured); break;
case "text": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Text); break;
case "time": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Time); break;
case "timestamp": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Timestamp); break;
case "tinyint": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.TinyInt); break;
case "udt": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Udt); break;
case "uniqueidentifier": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.UniqueIdentifier); break;
case "varbinary": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.VarBinary); break;
case "varchar": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.VarChar); break;
case "variant": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Variant); break;
case "xml": sqlcomm.Parameters.Add("@" + sdr.GetName(i), SqlDbType.Xml); break;
}
}
if (sdr.FieldCount > 0)
str = "update " + TableName + " set " + sdr.GetName(0) + " = @" + sdr.GetName(0);
for (int i = 1; i < sdr.FieldCount; i++)
str += ", " + sdr.GetName(i) + " = @" + sdr.GetName(i);
if (KeyFieldNames.Length > 0)
str += " where " + KeyFieldNames[0] + " = @" + KeyFieldNames[0];
for (int i = 1; i < KeyFieldNames.Length; i++)
str += " and " + KeyFieldNames[i] + " = @" + KeyFieldNames[i];
sdr.Close();
}
catch { }
return str;
}
البته من فقط متن دستور رو برگردوندم تو می تونی خود sqlcomm رو برگردونی چون پارامترهاش هم تعریف شده و می تونی بهشون مقدار بدی