检查Access / oledb中是否已存在列名

时间:2017-03-31 08:55:50

标签: c# sql ms-access oledb

我制作了一个简单的Windows窗体应用程序,它在访问文件(mdb)中创建一个表插入,删除,更新列。 (我为此使用了OLEDB连接。)我写了这段代码来插入列。

   con.Open();
    OleDbCommand cmd = new OleDbCommand();
    cmd.Connection = con;
    cmd.CommandText = "alter table [" +tableName + "] add [" + columnName + "] long;
    cmd.ExecuteNonQuery();
    con.Close();

现在我希望程序检查用户想要插入的列名是否已存在于数据库中。我该怎么做?

1 个答案:

答案 0 :(得分:3)

MS-Access

由于您是在应用程序代码中执行此操作,因此可以将其包装在try .. catch块中。如果列存在,那么它将抛出一个异常,您可以捕获并执行所需的任何操作,如

try
{
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandText = "alter table [" +tableName + "] add [" + columnName + "] long";
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
  //do your processing
}
finally
{
      con?.Close();
}

如果使用SQL Server

您可以查看sys.columns系统视图,例如

SELECT 1 FROM sys.columns 
        WHERE [name] = N'your_new_columnName' 
        AND [object_id] = OBJECT_ID(N'Your_tableName');

同样,您可以考虑将其包装在存储过程中并在应用程序代码中调用该过程,例如

create procedure usp_altertable(table_name varchar(20), column_name varchar(20))
as
begin
DECLARE @sql varchar(100);
   IF NOT EXISTS(SELECT 1 FROM sys.columns 
            WHERE [name] = N'your_new_columnName' 
            AND [object_id] = OBJECT_ID(N'Your_tableName'))
SET @sql = 'alter table ' +table_name +' add ' + column_name + ' long';
EXEC(@sql);
end

最后,如果table_namecolumn_name作为用户输入来自UI,则要小心 SQL Injection 并使用参数化查询。