我正在尝试通过我的Windows窗体应用程序(使用C#构建)在数据库的表中添加新列。
我创建了一个方法CreateFieldNameInTableData(string FieldName,string TableName),它传递变量'FieldName'的名称,该变量是要添加到表的列的名称'TableName',可以指定由用户。
尝试将列添加到表中的此方法的代码如下:
private void CreateFieldNameInTableData(string FieldName, string AssetTypeCode)
{
SqlConnection conn = new SqlConnection(SQLConnectionString);
SqlCommand comm = null;
try
{
try
{
comm = conn.CreateCommand();
comm.CommandText = "ALTER TABLE [AS_" + TableName + "_DATA] ADD " + FieldName + " VARCHAR(30)";
comm.CommandType = CommandType.Text;
comm.CommandTimeout = 30; //30 seconds
conn.Open();
}
catch (SqlException err)
{
MessageBox.Show("SqlException Error : " + err.Message.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show("Exception Error : " + ex.Message.ToString());
}
finally
{
conn.Close();
}
}
当我在Server Management Studio中使用相同的SQL脚本时,它成功地在表AS_TableName_DATA中创建了列,但是当我尝试使用C#执行相同操作时,它不会抛出任何错误但是在检查之后, table没有要创建的新列。
任何帮助......出了什么问题?
P.S。我还检查了SQLConnectionString,它也连接到正确的数据库。
答案 0 :(得分:2)
正如@TarasB所建议的那样,缺少comm.ExecuteNonQuery()并且c#SQLClient没有执行SQL查询。回顾这个错误感觉就像一个男生的错误'。
最终的工作代码如下:
try
{
comm = conn.CreateCommand();
comm.CommandText = "ALTER TABLE [AS_" + TableName + "_DATA] ADD [" + FieldName + "] VARCHAR(30)";
comm.CommandType = CommandType.Text;
comm.CommandTimeout = 120; //120 seconds
conn.Open();
comm.ExecuteNonQuery();
}
catch (SqlException err)
{
MessageBox.Show("SqlException Error : " + err.Message.ToString());
}