C# 将语句插入SQL Server数据库

C# 将语句插入SQL Server数据库,c#,sql-server,insert,C#,Sql Server,Insert,我正在使用SQL Server开发一个ASP.NET MVC Web应用程序 我试图在我的数据库中插入一个新条目,但我不明白我做错了什么 我在这一行遇到了一个例外: command.ExecuteNonQuery(); 代码是: try { SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=UniversityMa

我正在使用SQL Server开发一个ASP.NET MVC Web应用程序

我试图在我的数据库中插入一个新条目,但我不明白我做错了什么

我在这一行遇到了一个例外:

command.ExecuteNonQuery();
代码是:

try
            {
                SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=UniversityManager;Integrated Security=True");

                using (connection)
                {
                    //SqlCommand command = new SqlCommand(
                    //    "INSERT INTO Students VALUES(@Id, @Name, @Surname, @Year, @PhoneNumber, @Cnp);",
                    //    connection);
                    connection.Open();
                    String sql = "INSERT INTO Students(Id,Name,Surname,Year,PhoneNumber,Cnp) " +
                        "VALUES (@Id, @Name, @Surname, @Year, @PhoneNumber, @Cnp)";
                    SqlCommand command = new SqlCommand(sql, connection);
                    command.Parameters.Add("@Id", SqlDbType.Int);
                    command.Parameters["@Id"].Value = 5;

                    command.Parameters.Add("@Name", SqlDbType.VarChar);
                    command.Parameters["@Name"].Value = collection.Name;

                    command.Parameters.Add("@Surname", SqlDbType.VarChar);
                    command.Parameters["@Surname"].Value = collection.Surname;

                    command.Parameters.Add("@Year", SqlDbType.Int);
                    command.Parameters["@Year"].Value = collection.Year;

                    command.Parameters.Add("@PhoneNumber", SqlDbType.VarChar);
                    command.Parameters["@PhoneNumber"].Value = collection.PhoneNumber;

                    command.Parameters.Add("@Cnp", SqlDbType.VarChar);
                    command.Parameters["@Cnp"].Value = collection.Cnp;

                    command.ExecuteNonQuery();
                    connection.Close();
                }

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

谢谢大家!

年份是Sql Server的保留关键字。所以,如果你真的有一个同名的列,那么每次你引用它时,你都需要把它括在方括号里。最好改名

 String sql = "INSERT INTO Students(Id,Name,Surname,[Year],PhoneNumber,Cnp) " +
              "VALUES (@Id, @Name, @Surname, @Year, @PhoneNumber, @Cnp)";
另一种可能是
Id
列。如果此列的
IDENTITY
属性设置为true,则不应为其设置值。它由数据库引擎自动计算

查看innerexception消息,问题似乎是由于一个或多个参数包含的文本超出了数据库字段大小所允许的范围。
您可以尝试这样的方法(对于每个varchar参数)


字符串或二进制数据将被截断
异常意味着您试图插入的值对于Student表中的一列来说太大。例如,您的
Name
字段的最大长度为10个字符,但您试图插入一个15个字符的名称


检查要插入的值,看看它们是否对列太大。

什么是异常?System.Data.SqlClient.SqlException类型的第一次意外异常发生在System.Data.Dlly中。您需要提供内部异常,以便获得这方面的帮助,我的朋友。异常:引发:“字符串或二进制数据将被截断。语句已终止。“(System.Data.SqlClient.SqlException)引发System.Data.SqlClient.SqlException:“字符串或二进制数据将被截断。声明已被终止。“时间:2014年5月24日10:46:55 PM线程:工作线程[3416]尝试读取主异常的InnerException属性中的消息遵循您的Id建议,但仍然没有结果。能否添加一些有关表Students架构的信息?(列名、数据类型、大小和可空性)似乎您的一个参数包含的文本比数据库字段的大小所允许的文本多。OMG,我太累了。是的,这就是我所做的。它现在可以工作了。非常感谢。我现在得到这个:异常:捕获:“无法将值NULL插入列'Id',表'UniversityManager.dbo.Students';列不允许空值。插入失败。语句已终止。“(System.Data.SqlClient.SqlException)捕获到System.Data.SqlClient.SqlException:“无法将值NULL插入列'Id',表'UniversityManager.dbo.Students';列不允许空值。插入失败。声明已被终止。“时间:2014年5月24日10:55:24下午线程:Worker”
 // Assuming the Name field is defined as varchar(15)
 command.Parameters.Add("@Name", SqlDbType.VarChar, 15);
 command.Parameters["@Name"].Value = collection.Name;