我正在构建一个项目,在该项目中我访问数据库表,在表中插入和更新行和列。
我正在使用GridView
更新数据库中的表,使用该表我每次都会向另一个表添加新列。
我在button_Click上的代码是:
com = new SqlCommand("ALTER TABLE Location_Profile_Master ADD " + LocProName.Text + " int", con);
con.Open();
com.ExecuteNonQuery();
con.Close();
foreach (GridViewRow row in GridView1.Rows)
{
string Pro_Name = row.Cells[1].Text;
for (int i = 1; i < GridView1.Columns.Count; i++)
{
int n = Convert.ToInt16(row.Cells[i + 1].Text);
//short n = 0;
//if (Int16.TryParse(row.Cells[i + 1].Text, out n))
//{
com = new SqlCommand("UPDATE Location_Profile_Master SET " + LocProName.Text + "='" + n + "' WHERE Profile_Name='" + Pro_Name.ToString().Trim() + "' ", con);
con.Open();
com.ExecuteNonQuery();
con.Close();
//}
}
}
因此,在添加列及其值时,我想检查数据库中是否已存在该列名称,如果不存在,我想检查列值是否已存在于数据库中。应通知用户其列已存在于数据库中。
另外,当我插入一行时,我想知道该行中是否已存在该行。
请帮助。
答案 0 :(得分:1)
您可以直接在Information Schema Views中阅读MS SQL-Server中的架构信息,也可以使用DataReader.ExecuteReader(CommandBehavior.SchemaOnly)
来检索给定表的架构信息:
DataTable schema;
using (var con = new System.Data.SqlClient.SqlConnection(conStr))
{
var getSchemaSql = String.Format("SELECT * FROM {0}", tableName);
using (var schemaCommand = new System.Data.SqlClient.SqlCommand(getSchemaSql, con))
{
con.Open();
using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
{
schema = reader.GetSchemaTable();
}
}
}
然后类似于此:
for (int rowIndex = 0; rowIndex < schema.Rows.Count; rowIndex ++)
{
DataRow schemaRow = schema.Rows[rowIndex];
String columnName = schemaRow.Field<String>("ColumnName");
Type dataType = schemaRow.Field<Type>("DataType");
Int32 columnSize = schemaRow.Field<Int32>("ColumnSize");
if (dataType.FullName == "System.String")
{
// ...
}
}
或者,如果您只是想检查该表中是否存在给定的列名:
String colName = "Column1";
bool exists = schema.AsEnumerable()
.Any(r => r.Field<String>("ColumnName") == colName);
如果你想知道一行是否已经存在,你可以在sql中使用它的主键/标识符和EXISTS
:
IF NOT EXISTS(SELECT 1 FROM Location_Profile_Master WHERE PROFILE_NAME=@ProfileName)
答案 1 :(得分:0)
您最好为这类事情制作存储过程:
IF EXISTS ( SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Location_Profile_Master'
AND Column_Name = @columnParam)
BEGIN
-- The column exists
END
ELSE
-- The column doesn't exit
答案 2 :(得分:0)
我假设您正在使用MS SQL Server。尝试使用此代码检查列是否存在,并在其中验证该行是否存在:
IF EXISTS(SELECT * FROM SYS.COLUMNS WHERE Name = N'columnName'
AND Object_ID = Object_ID(N'Location_Profile_Master'))
BEGIN
-- Column Exists
IF EXISTS (SELECT Profile_Name FROM Location_Profile_Master WHERE Profile_Name = @yourValue)
BEGIN
--value exists
END
END
答案 3 :(得分:0)
首先是一个建议:使用参数而不是值"'" + "'"
,因为它对SQL注入是敏感的。
要检查数据库中是否存在列,您可以使用:
SELECT CASE WHEN COL_LENGTH('tableName', 'columnName') IS NOT NULL
THEN 1 ELSE 0 END AS isExists
即使数据库中不存在该表,这也会给你一个0