将语句插入SQL Server数据库

时间:2014-05-24 19:24:47

标签: c# sql-server insert

我正在使用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();
            }
        }

谢谢!

2 个答案:

答案 0 :(得分:2)

YEAR是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参数)

 // Assuming the Name field is defined as varchar(15)
 command.Parameters.Add("@Name", SqlDbType.VarChar, 15);
 command.Parameters["@Name"].Value = collection.Name;

答案 1 :(得分:1)

String or binary data would be truncated异常意味着您正在尝试为Student表中的某个列插入一个太大的值。例如,您的Name字段的最大长度为10,但您尝试插入15个字符的名称。

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