使用C#进行SQL插入查询

vos*_*art 20 c# sql sql-server-express

我现在遇到了一个问题,我正在努力解决这个问题.我只是尝试访问数据库并在C#的帮助下插入一些值

我试过的东西(工作)

String query = "INSERT INTO dbo.SMS_PW (id,username,password,email) VALUES ('abc',      'abc', 'abc', 'abc')";
Run Code Online (Sandbox Code Playgroud)

插入了一个新行,一切正常,现在我尝试使用变量插入一行:

String query = "INSERT INTO dbo.SMS_PW (id,username,password,email) VALUES (@id, @username, @password, @email)";

command.Parameters.AddWithValue("@id","abc")
command.Parameters.AddWithValue("@username","abc")
command.Parameters.AddWithValue("@password","abc")
command.Parameters.AddWithValue("@email","abc")

command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

没有工作,没有插入任何值.我又尝试了一件事

command.Parameters.AddWithValue("@id", SqlDbType.NChar);
command.Parameters["@id"].Value = "abc";

command.Parameters.AddWithValue("@username", SqlDbType.NChar);
command.Parameters["@username"].Value = "abc";

command.Parameters.AddWithValue("@password", SqlDbType.NChar);
command.Parameters["@password"].Value = "abc";

command.Parameters.AddWithValue("@email", SqlDbType.NChar);
command.Parameters["@email"].Value = "abc";

command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

愿有人能告诉我我做错了什么吗?

亲切的问候

编辑:

在另一行中,我正在创建一个新的SQL-Command

var cmd = new SqlCommand(query, connection);
Run Code Online (Sandbox Code Playgroud)

仍然没有工作,我在上面的代码中找不到任何错误.

And*_*aes 39

我假设您已连接到数据库,并且无法使用c#执行插入参数.

您没有在查询中添加参数.它应该看起来像:

String query = "INSERT INTO dbo.SMS_PW (id,username,password,email) VALUES (@id,@username,@password, @email)";

SqlCommand command = new SqlCommand(query, db.Connection);
command.Parameters.Add("@id","abc");
command.Parameters.Add("@username","abc");
command.Parameters.Add("@password","abc");
command.Parameters.Add("@email","abc");

command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

更新:

using(SqlConnection connection = new SqlConnection(_connectionString))
{
    String query = "INSERT INTO dbo.SMS_PW (id,username,password,email) VALUES (@id,@username,@password, @email)";

    using(SqlCommand command = new SqlCommand(query, connection))
    {
        command.Parameters.AddWithValue("@id", "abc");
        command.Parameters.AddWithValue("@username", "abc");
        command.Parameters.AddWithValue("@password", "abc");
        command.Parameters.AddWithValue("@email", "abc");

        connection.Open();
        int result = command.ExecuteNonQuery();

        // Check Error
        if(result < 0)
            Console.WriteLine("Error inserting data into Database!");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此处显示的`Add()`的重载已被弃用了一段时间. (8认同)
  • 如果不推荐使用Add(),那么插入的新方法是什么? (4认同)
  • 不推荐使用Add(),尝试AddWithValue (3认同)
  • 请注意阅读这些注释的人:不推荐使用`Add(parameterName,value)`.[`Add(parameterName,sqlDbType)`](https://msdn.microsoft.com/en-us/library/wbys3e9s(v = vs.110).aspx)和指定数据类型的类似方法完全没问题而不是去任何地方.例如,您仍然可以使用`command.Parameters.Add("@ username",SqlDbType.NChar).Value ="abc"`.不推荐使用的是*不指定参数的数据类型*. (3认同)
  • 记录弃用的链接:http://msdn.microsoft.com/en-us/library/9dd8zze1(v = vs.110).aspx (2认同)

the*_*Law 12

尝试

String query = "INSERT INTO dbo.SMS_PW (id,username,password,email) VALUES (@id,@username, @password, @email)";
using(SqlConnection connection = new SqlConnection(connectionString))
using(SqlCommand command = new SqlCommand(query, connection))
{
    //a shorter syntax to adding parameters
    command.Parameters.Add("@id", SqlDbType.NChar).Value = "abc";

    command.Parameters.Add("@username", SqlDbType.NChar).Value = "abc";

    //a longer syntax for adding parameters
    command.Parameters.Add("@password", SqlDbType.NChar).Value = "abc";

    command.Parameters.Add("@email", SqlDbType.NChar).Value = "abc";

    //make sure you open and close(after executing) the connection
    connection.Open();
    command.ExecuteNonQuery();
    connection.Close();
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您的`SqlConnection`对象在使用块中,则不需要调用`connection.Close()`,`Dispose()`将为您执行此操作. (4认同)

Mar*_*ell 5

最常见的错误(特别是使用快递时)"我的插入没有发生"是:查找错误的文件.

如果您使用的是基于文件的快速(而不是强附加),则项目文件夹中的文件(例如c:\dev\myproject\mydb.mbd)不是程序中使用的文件.在构建时,该文件被复制 - 例如c:\dev\myproject\bin\debug\mydb.mbd; 你的程序执行的背景下c:\dev\myproject\bin\debug\,因此它是在这里,你需要看看,如果编辑实际发生的情况.检查是否确定:查询应用程序内部的数据(插入后).