【问题标题】:Inserting rows into SQL with c# [closed]使用 c# 将行插入 SQL [关闭]
【发布时间】:2017-03-22 12:26:03
【问题描述】:

所以我的问题是,我在将这个插入查询写入我的 SQL 服务器时收到一条错误消息。我正在使用 Visual Studie 2017。错误消息:

System.ArgumentException: '没有分配对象类型System.Web.UI.HtmlControls.HtmlInputGenericControl 用于托管服务提供者的已知本机类型。'

这发生在我的 cmd.ExecuteNonQuery(); 上,但我尝试过 ScalarReader。都报错。

我真的希望有人有一个解决方案,这是一个大学项目。

protected void btnRegister_Click(object sender, EventArgs e)
{
    string connString = WebConfigurationManager.ConnectionStrings["csPAD"].ConnectionString;

    SqlConnection myConnection = new SqlConnection(connString);
    if (Page.IsValid)
    {
        string Study = rbStudy.SelectedValue;

        string sqlQuery = "INSERT INTO Registratie ([Firstname], [middlename], [Lastname], [Dateofbirth], [Study], [Email]) VALUES (@Firstname,@middlename,@Lastname,@Dateofbirth,@Study,@Email)";
       SqlCommand cmd = new SqlCommand(sqlQuery, myConnection)
        {

            cmd.Parameters.AddWithValue("@Firstname", txtFirstname.Text);
            if (txtmiddlename.Text == "")
            {
                cmd.Parameters.AddWithValue("@middlename", "");
            }
            else
            {
                cmd.Parameters.AddWithValue("@middlename", txtmiddlename.Text);
            }
            cmd.Parameters.AddWithValue("@Lastname", txtLastname.Text);
            cmd.Parameters.AddWithValue("@Dateofbirth", Dateofbirth);
            cmd.Parameters.AddWithValue("@Study", Study);
            if (txtEmail.Text == "")
            {
                cmd.Parameters.AddWithValue("@Email", "");
            }
            else
            {
                cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
            }        
            myConnection.Open();
            int rows = cmd.ExecuteNonQuery();
            MessageBox.Show(rows + " rows affected!");
            myConnection.Close();                             
        }
    }
    else
    { 
        lblNotification.Text = "Everything is required.";
    }
}

【问题讨论】:

  • Dateofbirth 对象是什么?
  • 旁注:middlenameEmail 的 if 语句毫无意义
  • connString 的值是否正确?
  • 你能贴出实际代码吗,看起来这段代码无法编译
  • 稍微绕道......在进行这样的临时查询时,您应该明确说明您的数据类型。数据类型并不总是被正确确定。尤其是日期。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/… 您还应该养成使用 USING 语句包装连接和命令对象的习惯。

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


【解决方案1】:

对您的 Asp.net 和 C# 代码进行以下更改

替换

<input type="date" ID="DateofBirth" runat="server" min="01-01-1990" max="01-01-2020">

 <asp:TextBox ID="DateofBirth" runat="server"></ asp:TextBox>

cmd.Parameters.AddWithValue("@Dateofbirth", Dateofbirth.Text);

【讨论】:

    【解决方案2】:

    @David 以下代码在我的 HTML 页面中:

    <td><asp:Label ID="lblDateofBirth" runat="server" Text="DateofBirth:"></asp:Label></td>
                <td><input type="date" ID="DateofBirth" runat="server" min="01-01-1990" max="01-01-2020"></td>
                <td><asp:RequiredFieldValidator ID="rfvDateofBirth" runat="server" ControlToValidate="DateofBirth" ErrorMessage="Dit veld is vereist!" ForeColor="Red" ></asp:RequiredFieldValidator></td>
    

    这是在我的 Web.config 中配置的:

    <connectionStrings>
        <add name="csPAD" connectionString="Data Source=MARCO-LAPTOP;Initial Catalog=ProjectPAD;Integrated Security=True"/>
      </connectionStrings>
    

    对于要求完整代码的:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.Configuration;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Windows.Forms;
    
    
    public partial class Register : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
    
        protected void btnRegister_Click(object sender, EventArgs e)
            {
                string connString = WebConfigurationManager.ConnectionStrings["csPAD"].ConnectionString;
    
                SqlConnection myConnection = new SqlConnection(connString);
                if (Page.IsValid)
                {
                    string Study = rbStudy.SelectedValue;
    
                    string sqlQuery = "INSERT INTO Registratie ([Firstname], [middlename], [Lastname], [Dateofbirth], [Study], [Email]) VALUES (@Firstname,@middlename,@Lastname,@Dateofbirth,@Study,@Email)";
                   SqlCommand cmd = new SqlCommand(sqlQuery, myConnection)
                    {
    
                        cmd.Parameters.AddWithValue("@Firstname", txtFirstname.Text);
                        if (txtmiddlename.Text == "")
                        {
                            cmd.Parameters.AddWithValue("@middlename", "");
                        }
                        else
                        {
                            cmd.Parameters.AddWithValue("@middlename", txtmiddlename.Text);
                        }
                        cmd.Parameters.AddWithValue("@Lastname", txtLastname.Text);
                        cmd.Parameters.AddWithValue("@Dateofbirth", Dateofbirth);
                        cmd.Parameters.AddWithValue("@Study", Study);
                        if (txtEmail.Text == "")
                        {
                            cmd.Parameters.AddWithValue("@Email", "");
                        }
                        else
                        {
                            cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
                        }        
                        myConnection.Open();
                        int rows = cmd.ExecuteNonQuery();
                        MessageBox.Show(rows + " rows affected!");
                        myConnection.Close();                             
                    }
                }
                else
                { 
                    lblNotification.Text = "Everything is required.";
                }
            }
    
    }
    

    【讨论】:

      【解决方案3】:

      你可以这样试试吗?

      con.Open();
      SqlCommand cmd = new SqlCommand(@"insert into tbl_insert values(@name,@email,@add)", con);
      cmd.Parameters.AddWithValue("@name", txtname.Text);
      cmd.Parameters.AddWithValue("@email", txtemail.Text);
      cmd.Parameters.AddWithValue("@add", txtadd.Text);
      cmd.ExecuteNonQuery();
      con.Close();
      

      【讨论】:

        【解决方案4】:

        我的猜测是您需要修复以下行(Dateofbirth 似乎是一个控件名称?):

         cmd.Parameters.AddWithValue("@Dateofbirth", Dateofbirth);
        

        【讨论】:

        • Study 的类型为 string,如代码所示。
        • 对不起,是出生日期(刚刚修正)
        猜你喜欢
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-26
        • 1970-01-01
        相关资源
        最近更新 更多