2013-07-08 41 views
1

我有一个查询删除级联,在这里查询创建的更新和删除级联

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#级联更新?所以查询是运行/克里特自动在这种方法

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

如果你要这么长,使用ORM。做事更容易,更好。 – MSI

回答

0

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

虽然,我建议你按照MSI的建议做并使用ORM。