得到错误"未处理的类型' System.Data.SqlClient.SqlException'发生在System.Data.dll"

时间:2017-08-19 16:21:18

标签: c# sql ado.net ado

我正在尝试编码"插入,删除,更新,显示"使用Ado.Net为我的作业选择sql。因为我还在学习,我的代码可能很冗长。请检查并告诉我我在哪里犯错误。代码是一半(仅针对插入编码)。

我得到的错误是:

enter image description here

我的代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;

namespace Crud
{
    class Program
    {       
        static void Main(string[] args)
        {
            Console.WriteLine("--What do you want to do?--");            
            Console.WriteLine(" 1. Insert\n 2. Update\n 3. Delete\n 4. Display\n");
            int choice=int.Parse(Console.ReadLine());
            if (choice == 1)
            {
                Console.Write("Enter Student name:");
                string SName=Console.ReadLine();
                Console.Write("Enter Student Mobile Number:");
                string SMob = Console.ReadLine();
                Console.Write("Enter student fees:");
                string Sfees = Console.ReadLine();
                Console.Write("Enter student course:");                
                string course=Console.ReadLine();
                SqlConnection con = new SqlConnection("Data Source=Sachin-PC;Initial Catalog=ADOProject;Integrated Security=True");
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "insert into focusstudents values(@name,@mobile,@fees,@course)";
                cmd.Parameters.AddWithValue("@name",SName);
                cmd.Parameters.AddWithValue("@mobile",SMob);
                cmd.Parameters.AddWithValue("@fees", Sfees);
                cmd.Parameters.AddWithValue("@course", course);
                cmd.Connection = con;
                con.Open();
                int l = cmd.ExecuteNonQuery();
                if (l > 0)
                {
                    Console.WriteLine("Inserted Successfully");
                    cmd.CommandText = "select * from focusstudents";
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    if (dt.Rows.Count > 0)
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            Console.Write("{0}{1}", dr[0], dr[1]);
                        }
                    }
                    else
                    {
                        Console.WriteLine("There is no data to display, add any data to be shown here");
                    }
                }
                con.Close();            
            }
            Console.ReadKey();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您是否注意到例外中的其他信息?那个是有用的错误信息。

  

列名或提供的值与表定义不匹配。

简单,更改您的插入查询,如下所示:

insert into focusstudents (column1, column2, column3, column4) values(@name,@mobile,@fees,@course)

它会起作用。这将确保及时映射传递值。即使您稍后在表定义中添加任何列,也不会中断。

更新:主键列应配置为自动播种或必须处理代码以在插入时获取唯一ID。