使用C#命令从多个SQL表中删除

时间:2013-09-27 12:00:20

标签: c# sql

我想用C#命令从多个SQL表中删除,但我总是得到错误:

  

“,”附近的语法无效。

到目前为止,这是代码:

string connectionString = @"Data Source=" + System.IO.File.ReadAllText("Server.ini") + ";" + "Initial Catalog=" + "lin2world" + ";" + "User ID=" + System.IO.File.ReadAllText("User.ini") + ";" + "Password=" + System.IO.File.ReadAllText("Password.ini");
string sql = "DELETE FROM user_data, user_item, user_ActiveSkill, user_blocklist, user_deleted, user_friend, user_henna, user_history, user_log, user_macro, user_macroinfo, user_newbie, user_nobless, user_punish, user_recipe, user_skill, user_sociality, user_subjob WHERE char_id='" + textBox1.Text + "' ";
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);
DataSet ds = new DataSet();
connection.Open();
dataadapter.Fill(ds, "char_id");
connection.Close();
MessageBox.Show("Character Deleted!!");

3 个答案:

答案 0 :(得分:4)

您只能从删除语句中的一个表中删除。

在事务中使用多个delete语句来执行删除

如果你不熟悉C#中的交易就是一个例子

using (var Conn = new SqlConnection(_ConnectionString))
{
    SqlTransaction trans = null;
    try
    {
        Conn.Open();
        trans = Conn.BeginTransaction();

        using (SqlCommand Com = new SqlCommand(ComText, Conn, trans))
        {
            /* DB work */
        }
        trans.Commit();
    }
    catch (Exception Ex)
    {
        if (trans != null) trans.Rollback();
        return -1;
    }
}

答案 1 :(得分:1)

如果你想做类似的事情,你可以将所有表作为一个列表传递,并仍然做你想做的事。

DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name IN ("user_data","user_item","user_ActiveSkill","user_blocklist","user_deleted","user_friend","user_henna","user_history","user_log","user_macro","user_macroinfo","user_newbie","user_nobless","user_punish","user_recipe","user_skill","user_sociality","user_subjob")  -- use these databases

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   


WHILE @@FETCH_STATUS = 0   
BEGIN   

       DELETE FROM @name WHERE char_id='whatever'

       FETCH NEXT FROM db_cursor INTO @name   
END   
编辑:似乎这些都是相关的表 - 如果你与cascade:delete有适当的关系,你应该只需要删除主记录,它的孩子都会照顾好自己

答案 2 :(得分:0)

您无法从SQL Server中的一个语句中删除多个表。您将需要多个语句,每个表一个:

DELETE FROM user_data WHERE PersonID = '2';
DELETE FROM user_item WHERE PersonID = '2';

等等

单独关闭每一个,(确保不违反任何FK)或创建存储过程并关闭它(以最小化数据库连接的打开和关闭)。

我使用触发器的经验告诉我不要使用触发器,有时它们不应该触发它们!