创建更新并删除级联

时间:2013-07-08 02:39:22

标签: c# sql-server sql-server-2008 tsql cascade

我有一个删除级联的查询,这里是查询

create table satuan_type
(
    id int identity(1,1),
    satuan_id int(200),
    type_id int,
    primary key(id),
    foreign key(satuan_id) references satuan(id) on update cascade on delete cascade
);

问题是,如何用c#创建/添加,删除和更新级联?所以查询在这个方法中自动运行/ crete

Dictionary<String, String> dic = new Dictionary<string, string>();
dic.Add("id", "INT PRIMARY KEY IDENTITY");
dic.Add("satuan_id", "INT");
dic.Add("type_id", "INT");
cDatabaseSQLServer.CreateTables("satuan_type", dic);

public int CreateTables(String tableName, Dictionary<String, String> data)
{
    switch (sqlType)
    {
        case DATABASE_SQL_TYPE.DATABASE_SQL_TYPE_SQLITE:
            return cSQLite.CreateTables(tableName, data);
        case DATABASE_SQL_TYPE.DATABASE_SQL_TYPE_MSSQL:
            return cSQL.CreateTables(tableName, data);
    }
    return 0;
}

public int CreateTables(String tableName, Dictionary<String, String> data)
{
    string s = "CREATE TABLE " + tableName + " (";
    bool first = true;
    foreach (KeyValuePair<String, String> val in data)
    {
        if (first)
        {
            first = false;
        }
        else
        {
            s = s + ",";
        }
        string s1;
        s1 = String.Format("{0} {1}", val.Key, val.Value);
        s = s + s1;
    }
    s = s + ")";
    return this.ExecuteNonQuery(s);
}

1 个答案:

答案 0 :(得分:0)

我认为你需要为你的CreateTables方法添加逻辑。最好添加更多参数,您可以在其中输入您想要约束的任何键。因为我正在阅读的内容,你根本没有创造任何约束。这可以通过迭代你已经使用的相同逻辑来实现,但是分别对于主键和外键 - 最好使用布尔变量标志来标记它们是否应该级联。

虽然,我建议您按照MSI建议并使用ORM。