首页 > 解决方案 > 我不能在表中插入除“Id”值之外的任何内容

问题描述

我目前正在从头开始构建我的第一个 Web 应用程序并试图弄清楚 C# 和 SQLDatabases 的通信,我一直在尝试将自定义数据输入到表中。

由于某种原因,这段代码工作得很好,它成功地在新行中添加了“Id = 3”:

sql = " INSERT INTO dbo.AspNetUsers (Id) VALUES (3)";

    SqlCommand command = new SqlCommand(sql, cnn);
    SqlDataAdapter adapter = new SqlDataAdapter();

    adapter.InsertCommand = new SqlCommand(sql, cnn);
    adapter.InsertCommand.ExecuteNonQuery();

但是这个没有,唯一的区别是它在不同的列中添加了另一个项目,而不是前一个它只添加“Id”:

sql = " INSERT INTO dbo.AspNetUsers (Id, UserName) VALUES (3, testName)";

    SqlCommand command = new SqlCommand(sql, cnn);
    SqlDataAdapter adapter = new SqlDataAdapter();

    adapter.InsertCommand = new SqlCommand(sql, cnn);
    adapter.InsertCommand.ExecuteNonQuery();

最后,我遇到的另一个问题是,我无法使用 ExecuteReader() 和 ExecuteScalar() 从我创建的表中读取数据,而不是使用框架身份验证系统设置的表。

提前致谢。

标签: c#sqlasp.net-mvc

解决方案


此代码解决了这两个问题:

  1. UserName 的值作为 SQL 参数传递,建议将其用于字符串值以避免 SQL 注入和其他可能的问题,
  2. SQL 命令用 ExecuteNonQuery 执行,调用不返回任何结果的 SQL 命令的正确方法
    SqlCommand cmd = new SqlCommand();
    string sql = " INSERT INTO dbo.AspNetUsers (Id, UserName) VALUES (3, @testName)";
    cmd.Parameters.AddWithValue("@testName", "testName");
    cmd.Connection = con;
    cmd.CommandText = sql;
    con.Open();
    cmd.ExecuteNonQuery();

推荐阅读