【问题标题】:How do I validate data inserted from asp.net to SQL Server如何验证从 asp.net 插入到 SQL Server 的数据
【发布时间】:2016-07-12 10:22:05
【问题描述】:

我有一个已连接到 SQL Server 的 Web 表单。我可以插入,但如果表已经有相同的信息,我不知道如何进行验证以不插入数据。

如何完成这个过程?

using (SqlConnection con = new SqlConnection("Data Source=hans-pc;Initial Catalog=CntExp;Integrated Security=True"))
{
    SqlCommand cmd = new SqlCommand("INSERT INTO PreExp1 (Expe, Usuario) values (@Expe, @Usuario)", con);
    cmd.Parameters.AddWithValue("@Expe", TextBox1.Text);
    cmd.Parameters.AddWithValue("@Usuario", TextBox2.Text);
    //cmd.Parameters.AddWithValue("@Fecha", Datenow());

    con.Open();

    int insertar = cmd.ExecuteNonQuery();

    Response.Write("Inserted" + insertar.ToString());
}

【问题讨论】:

  • 尝试插入,命中唯一索引,处理失败。此外,您应该在完成连接后明确关闭连接。
  • 欢迎来到 StackOverflow!您的问题有点宽泛,因为有很多不同的方法可以实现这一目标。您可以通过从代码(事务内部)查询数据库或在数据库中使用触发器来检查数据是否存在。 SO 更有可能帮助您解决特定的编码问题。因此,您应该更具体地说明“相同信息”的含义。语义可能有助于决定您是要在代码中还是在数据库级别进行验证。
  • @OmarLopez 如果您正确地构建了表,并且具有正确的引用完整性,那么您的插入应该抛出一个您可以适当捕获和处理的异常。

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


【解决方案1】:

您正在使用输入参数。像这样的行:

cmd.Parameters.AddWithValue("@Expe", TextBox1.Text);

它们被视为输入参数。验证数据的一种方法是使用输出参数。比如:

SqlParameter outParam = cmd.Parameters.Add("@MyParam", sqlDbType.Uniqueidentifier);
outParam.Direction = ParameterDirection.Output;

将其传递给确定记录是否存在的存储过程,并将布尔值“True”或“False”传递回您的 C# 代码。 然后可以查看outParam的值,判断是否要继续处理代码。

【讨论】:

    【解决方案2】:

    除了在数据库中进行正确的完整性检查外,您还可以应用 WHERE NOT EXISTS 子查询。

    INSERT INTO PreExp1 (Expe, Usuario) 
    VALUES (@Expe, @Usuario)
    WHERE NOT EXISTS (SELECT * FROM PreExp1
                        WHERE Expe = @Expe
                        AND Usuario = @Usuario)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多