通过asp.net从sql数据库添加和删除数据

时间:2014-07-02 19:41:42

标签: c# asp.net sql sql-server

基本上这是我的插入函数,它将字符串插入到sql表中

[System.Web.Services.WebMethod]     
        public static string InsertData(string ID)
        {
            string connectionString = ConfigurationManager.ConnectionStrings["SimpleDB"].ToString();          
            using (SqlConnection con = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd = new SqlCommand("Insert into Book (Name) values(@Name)", con))
                    {
                        con.Open();
                        cmd.Parameters.AddWithValue("@Name", ID);
                        cmd.ExecuteNonQuery();
                        con.Close();
                        return "True";
                    }
                }
        }

现在我想从这个表中删除一行,如果存在,我尝试了这个,但我似乎在执行查询时遇到错误。

  [System.Web.Services.WebMethod]
        public static string DeleteData(string ID)
        {
            string connectionString = ConfigurationManager.ConnectionStrings["SimpleDB"].ToString();
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand
                    (
                    "Delete from Book Where Name = "+ID.ToString()
                    , con))
                {
                    con.Open();                                     
                    cmd.ExecuteNonQuery();                   
                    con.Close();
                    return "True";
                }
            }


        }

1 个答案:

答案 0 :(得分:2)

注意传递给方法的ID变量是一个字符串?
这意味着WHERE子句中使用的Name字段期望字符串找到要删除的行。当用作Sql WHERE中的值时,字符串用单引号括起来。

例如,如果直接在Sql Server Management Studio中编写查询:

 DELETE FROM Book WHERE Name = 'xyz'

如果没有引号,您会收到错误,这可能是您现在的问题。

解决方案就是按照插入新行时使用的相同步骤进行操作。 参数化查询,您不必担心引用字符串或更糟糕的Sql Injections

[System.Web.Services.WebMethod]
public static string DeleteData(string ID)
{
        string connectionString = ConfigurationManager.ConnectionStrings["SimpleDB"].ToString();
        using (SqlConnection con = new SqlConnection(connectionString))
        {
            using (SqlCommand cmd = new SqlCommand(@"Delete from Book 
                                                     Where Name = @ID" , con))
            {
                con.Open();                                     
                cmd.Parameters.AddWithValue("@ID", ID);
                cmd.ExecuteNonQuery();                   
                con.Close();
                return "True";
            }
        }
  }

删除操作是安全的,因为如果记录不存在,则WHERE子句找不到要删除的任何行。但是,如果您需要用于其他目的检查是否存在记录,您可以编写类似这样的内容

public static bool Exists(string ID)
{
    string connectionString = ConfigurationManager.ConnectionStrings["SimpleDB"].ToString();
    using (SqlConnection con = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand(@"
                      IF EXISTS(SELECT 1 FROM Book Where Name = @ID)
                      SELECT 1 ELSE SELECT 0" , con))
    {
         con.Open();                                     
         cmd.Parameters.AddWithValue("@ID", ID);
         int result = Convert.ToInt32(cmd.ExecuteScalar()); 
         return (result == 1);
    }
}