【问题标题】:Error parsing - Insert value Textbox inside database错误解析 - 在数据库中插入值文本框
【发布时间】:2020-12-22 12:11:46
【问题描述】:

我有一个 ASP.NET 表单,它有两个文本框和一个标签,用户只在最后一个文本框中输入到期日期,而如果用户点击客户所在的转发器内的另一个按钮,其他的会自动插入找到代码和公司名称。

问题是我创建了一个类来进行插入:我使用存储过程进行插入,并使用查询参数化。

当我解析代码和日期时,它会给我 0 和一个默认日期,而我的目标是将它们插入到数据库中的表中,然后将其显示在中继器中。

附:我补充说,为了读取数据,我有另一个类和另一个存储过程,并且我有一些值在另一个表中(代码和公司名称)。

这是方法:

Public Sub INSERT_EXP_DATE_TABLE()

    Dim id_customer As Integer
    Dim exp_date As Date

    Try
        cmd.Connection = cn
        cmd.CommandType = CommandType.StoredProcedure
        MyParm = cmd.Parameters.Add("@COD_CUSTOMER", SqlDbType.Int)
        If (Integer.TryParse(txt_COD_CUSTOMER.Text, id_customer)) Then

            MyParm.Value = id_customer
        Else
            MsgBox("customer not found", vbCritical)
        End If

        MyParm = cmd.Parameters.Add("@COMPANY_NAME", SqlDbType.NVarChar)
        MyParm.Value = lbl_COMPANY_NAME.Text.ToString
        MyParm = cmd.Parameters.Add("@EXP_DATE", SqlDbType.Date)
        If (Date.TryParse(txt_EXP_DATE.Text, exp_date)) Then

            MyParm.Value = exp_date
        Else
            MsgBox("Exp Date not found", vbCritical)
        End If

        cmd.CommandText = "LST_INSERT_TABLE_01"
        cmd.Connection.Open()
        cmd.ExecuteNonQuery()
        MsgBox("Date registred", vbInformation)
    Catch ex As Exception
        MsgBox(ex.Message)

    Finally
        cn.Close()
    End Try

End Sub

这是存储过程:

@ID_CUSTOMER int,
@COMPANY_NAME varchar(50),
@EXP_DATE date, 

AS

BEGIN
INSERT INTO TABLE
                (
                ID_CUSTOMER,
                COMPANY_NAME,
                EXP_DATE,
                
                )

                
 VALUES(
 
 @ID_CUSTOMER,
 @COMPANY_NAME,
@EXP_DATE,
 
 
 )
END

【问题讨论】:

  • 您看到任何错误吗?
  • 它说“没有从字符串“”转换为“日期”类型
  • 您将日期传递为空MyParm = cmd.Parameters.Add("@EXP_DATE", SqlDbType.Date); MyParm.Value = exp_date
  • 正确的程序是什么?我尝试了不同的解析,例如日期的 Tryparse 和 TryparseExact 以及整数的 Cint。好像没有读取其他字段的值,如果前两个字段来自另一个表,可能是存储过程的问题?
  • 试试这个cmd.Parameters.AddWithValue("@EXP_DATE", exp_date); cmd.Parameters.AddWithValue("@COD_CUSTOMER", id_customer); cmd.Parameters.AddWithValue("@COMPANY_NAME", lbl_COMPANY_NAME.Text.ToString);

标签: asp.net sql-server vb.net


【解决方案1】:

将您的连接保持在使用它的方法的本地。连接使用非托管资源,因此它们包含一个释放这些资源的.Dispose 方法。为确保数据库对象已关闭和处置,请使用 Using...End Using 块。

在开始创建数据库对象之前是否进行解析。退出 sub 以便用户有机会纠正问题。

附注:我不认为消息框可以在 asp.net 应用程序中使用。

您将公司名称参数设置为NVarChar,但您的存储过程将其声明为VarChar。哪个是正确的?

没有必要在 .Text 属性上调用 .ToString.Text 属性已经是 String

您提供了一个名为 "@COD_CUSTOMER" 的参数,但您的存储过程没有这样的参数。

Public Sub INSERT_EXP_DATE_TABLE()
    Dim id_customer As Integer
    If Not Integer.TryParse(txt_COD_CUSTOMER.Text, id_customer) Then
        MsgBox("Please enter a valid number.", vbCritical)
        Exit Sub
    End If

    Dim exp_date As Date
    If Not Date.TryParse(txt_EXP_DATE.Text, exp_date) Then
        MsgBox("Please enter a valid date.")
        Exit Sub
    End If

    Using cn As New SqlConnection("Your connection string"),
                cmd As New SqlCommand("LST_INSERT_TABLE_01", cn)
        cmd.CommandType = CommandType.StoredProcedure
        With cmd.Parameters
            .Add("@ID_CUSTOMER", SqlDbType.Int).Value = id_customer
            .Add("@COMPANY_NAME", SqlDbType.VarChar, 50).Value = lbl_COMPANY_NAME.Text
            .Add("@EXP_DATE", SqlDbType.Date).Value = exp_date
        End With
        Try
            cn.Open()
            cmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Using
End Sub

【讨论】:

  • 我可以用这个方法更新吗?
  • 您可以使用相同的格式进行更新,但当然会是不同的存储过程和不同的参数集。
  • @CamiCode 这个存储过程是谁写的?
  • 你真的有一个叫TABLE的表吗?
【解决方案2】:
   {
       
       string CN = Interaction.InputBox("Enter Company Name","Customer","",-1,-1);
       string Cname =  Interaction.InputBox("Enter Customer Name", "Customer", "", -1, -1);
        SqlConnection con = new SqlConnection(@"Data Source=Adnan;Initial Catalog=Production;Integrated Security=True");
        con.Open();
        SqlCommand cmd = new SqlCommand("INSERT INTO hello(Company_Name,Customer_name ) VALUES ( @Company_Name,@Customer_name )");
        cmd.Connection = con;
        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("@Company_Name", CN.ToString() );
        cmd.Parameters.AddWithValue("@Customer_name", Cname.ToString());
    }

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
  • 您的答案可以通过添加有关代码的作用以及它如何帮助 OP 的信息来改进。
猜你喜欢
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多