2

我正在构建一个项目,在该项目中我访问数据库表,将行和列插入和更新到表中。

我正在使用 更新数据库中的表,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();
                    //}
                }

            }

因此,在添加列及其值时,我想检查该列名是否已经存在于数据库中,如果不存在,我想检查列值是否已经存在于数据库中。应通知用户该列已存在于数据库中。

另外,当我插入一行时,我想知道该行是否已经存在于表中。

请帮助。

4

4 回答 4

1

您可以直接在信息架构视图中读取 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);

如果你想知道一行是否已经存在,你可以使用它的主键/标识符和EXISTSsql:

IF NOT EXISTS(SELECT 1 FROM Location_Profile_Master WHERE PROFILE_NAME=@ProfileName)
于 2012-09-06T07:21:35.323 回答
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
于 2012-09-06T07:22:44.700 回答
0

首先是一个建议:使用参数而不是 value "'" + "'",因为它对 SQL 注入很敏感。

要检查数据库是否存在列,您可以使用:

SELECT CASE  WHEN COL_LENGTH('tableName', 'columnName') IS NOT NULL 
THEN 1 ELSE 0 END AS isExists

即使数据库中不存在该表,这也会为您提供 0

于 2012-09-06T07:23:37.990 回答
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
于 2012-09-06T07:21:58.393 回答