检查 Access/oledb 中是否已存在列名
Check if column name already exists in Access/oledb
我制作了一个简单的 Windows 表单应用程序,它在访问文件 (mdb) 中创建了一个 table 插入、删除、更新列。 (我为此使用了 OLEDB 连接。)我写了这段代码来插入列。
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandText = "alter table [" +tableName + "] add [" + columnName + "] long;
cmd.ExecuteNonQuery();
con.Close();
现在我想让程序检查数据库中是否已经存在用户要插入的列名。我该怎么做?
对于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_name
和 column_name
是来自 UI 的用户输入,那么要警惕 SQL 注入 并改用参数化查询。
我制作了一个简单的 Windows 表单应用程序,它在访问文件 (mdb) 中创建了一个 table 插入、删除、更新列。 (我为此使用了 OLEDB 连接。)我写了这段代码来插入列。
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandText = "alter table [" +tableName + "] add [" + columnName + "] long;
cmd.ExecuteNonQuery();
con.Close();
现在我想让程序检查数据库中是否已经存在用户要插入的列名。我该怎么做?
对于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_name
和 column_name
是来自 UI 的用户输入,那么要警惕 SQL 注入 并改用参数化查询。