【问题标题】:Insert Values into database将值插入数据库
【发布时间】:2024-01-19 09:26:01
【问题描述】:

我一直在使用以下代码将值插入 MySQL 数据库。代码构建时没有错误消息,但是一旦我尝试运行它就会说:

MySql.Data.MySqlClient.MySqlException:列“名称”不能为空

请告诉我代码中的错误。

这是我正在使用的插入功能:

public int insert (int id, string name, string sname, int marks )
{
     string connection= ConfigurationManager.ConnectionStrings["Conn"].ConnectionString;
       MySqlConnection con = new MySqlConnection(connection);


    MySqlCommand com = new MySqlCommand("INSERT INTO Student_details(id,name,sname,marks) values(@id,@name, @sname, @marks)");

   // com.Connection = com;
   com.Connection = con;
    con.Open();

    //com.Parameters.Add("@id", id);
    //com.Parameters.Add("@name", name);
    //com.Parameters.Add("@sname", sname);
    //com.Parameters.Add("@marks", marks);
    com.Parameters.AddWithValue("@id", id);
    com.Parameters.AddWithValue("@name", name);
    com.Parameters.AddWithValue("@sname", sname);
    com.Parameters.AddWithValue("@marks", marks);
   //// com.Parameters.a
    //com.ExecuteNonQuery();
    int ret = Convert.ToInt32(com.ExecuteScalar());

    return ret;
}

【问题讨论】:

  • 在这个错误信息中有什么你不明白的地方?您显然是在 name 列中插入 null ...
  • 当您调用insert 方法时,您的参数name 是否为空?

标签: c# mysql database insert


【解决方案1】:

你能用参数验证重写你的方法吗?这将使您的编程风格+1。另外,如果输入不符合预期的合同,您会更快地知道。

public int insert (int id, string name, string sname, int marks )
{
    if(name == null) throw new ArgumentNullException("name");
    ...
}

似乎您正在传递一个name 参数,即null

【讨论】:

  • 不,我正在从其他前端页面获取参数名称的值。我已经发布了下面的代码。请看
【解决方案2】:

您确定名称不为空吗?你没有验证你的参数。

【讨论】:

    【解决方案3】:

    您好,我正在使用以下简单的前端函数将数据字段的值插入到具有函数 Insert() 的数据访问层类中...请注意我哪里出错了..... ...

    try
    {
        DataAccessLayer dal = new DataAccessLayer();
        int id = 23;
        string name = "mayank";
        string sname = "agarwal";
        int marks = 34;
        int a = dal.insert(id, name, sname, marks);
        LblUserName.Text = a.ToString();
    }
    catch (Exception ex)
    {
        Console.Write(ex.Message.ToString());
            throw;
    }
    

    【讨论】: