Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过文本框将SQL数据插入ASP.Net Web应用程序中的表中_C#_Sql_Asp.net_Sql Server 2012_Visual Studio 2017 - Fatal编程技术网

C# 通过文本框将SQL数据插入ASP.Net Web应用程序中的表中

C# 通过文本框将SQL数据插入ASP.Net Web应用程序中的表中,c#,sql,asp.net,sql-server-2012,visual-studio-2017,C#,Sql,Asp.net,Sql Server 2012,Visual Studio 2017,我在Default.aspx页面上添加了SqlDataSource1,这似乎是成功的,因为我可以在gridview中看到用户表的列名。该表是空的,我所要做的就是在文本框中获取输入并将其发送到UserName列。 我不太擅长调试,但我注意到了一些错误,我花了几个小时研究这些错误。 我尝试过的事情: SQL SMS>工具>选项>设计器>检查阻止保存需要重新创建表的更改 增加使用系统数据 增加cmd.Connection.Open() 在catch语句中添加了要捕获的异常 重新创建整个数据库 四重检

我在Default.aspx页面上添加了SqlDataSource1,这似乎是成功的,因为我可以在gridview中看到用户表的列名。该表是空的,我所要做的就是在文本框中获取输入并将其发送到UserName列。 我不太擅长调试,但我注意到了一些错误,我花了几个小时研究这些错误。 我尝试过的事情:

  • SQL SMS>工具>选项>设计器>检查阻止保存需要重新创建表的更改
  • 增加使用系统数据
  • 增加cmd.Connection.Open()
  • 在catch语句中添加了要捕获的异常
  • 重新创建整个数据库
  • 四重检查,例如txtUsername是正确的文本框ID
  • 反复重新配置SqlDataSource1,删除并重新创建
  • 确认web.config中的connectionString是正确的
  • 使用web.config中的确切字符串创建新的SQLConnection

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.Sql;
    using System.Data.SqlClient;
    
    
    namespace todoassignment1
    {
        public partial class Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                Label1.Visible = false;  
            }
    
            protected void btnSubmit_Click(object sender, EventArgs e)
            {
                string valueUser = txtUsername.Text;
    
                SqlConnection db = new SqlConnection(SqlDataSource1.ConnectionString);
    
                SqlCommand cmd = new SqlCommand();
    
                cmd.CommandType = CommandType.Text;
    
                //User is the name of the table, UserName is the column 
                cmd.CommandText = "INSERT User (UserName) VALUES ('" + valueUser + "')";
    
                cmd.Connection = db;
    
                db.Open();
    
                try
                {
                    cmd.Connection.Open();
                    cmd.ExecuteNonQuery();
                    Label1.Text = "Success writing into database!";
                    Label1.Visible = true;  
                }
                catch (Exception ex)
                {
                    Label1.Text = "Error writing into database.";
                    Console.WriteLine(ex.Message);
                    Label1.Visible = true;
                }
                finally
                {
                    db.Close();
                }
            }
        }
    }
    
  • 将插入行从串联更改为“插入用户(用户名)值('asdf')”以简化代码,但仍然不起作用

  • 尝试了其他语法

        SqlConnection db = new SqlConnection("Data Source=NAME-PC\\SQLEXPRESS;Initial Catalog=Assignment;Integrated Security=True");
    
调试器提供的线索:

  • 在autos中挖掘cmd时,看到几个“System.InvalidCastException”
  • 错误CS0103:当前上下文中不存在名称“ExecuteOnQuery”

  • 运行后始终查看系统。无效操作异常

请帮忙

    cmd.CommandText = "INSERT INTO User (UserName) VALUES (@username)";

    cmd.Parameters.Add("@username", SqlDbType.NVarChar, 50);

    cmd.Parameters["@username"].Value = txtUsername.Text.ToString();
有几个问题

  • insert的语法是
    insert INTO TABLE(COLUMNS)VALUES(VALUES)
    您有“insert User(UserName)”
  • USER
    是SQL中的保留字。如果坚持将其用作表名,则必须将其括在方括号中
  • 你打开了两次连接。这本身不是问题,但没有必要
  • 总是,总是,总是使用参数
  • 我把事情简化了一点

  • 如果您修改了我附加的方法,您应该能够复制粘贴它。

    我认为这是第二个问题,因为我已经尝试了第一个建议。我创建了一个名为Person而不是User的新表,对其进行了轻微修改以获得电子邮件,最后它接受了我的输入。非常感谢!您应该检查并阻止我们ing
    .AddWithValue()
    -这可能会导致意外的结果…@marc_理解。我不再费心写这样的查询了,现在大多使用简洁的方式。谢谢你的链接,我会仔细阅读的。
    static void BtnSubmit_Click(object sender, EventArgs e)
    {
        string valueUser = "test"; //txtUsername.Text;
        using (SqlConnection db = new SqlConnection("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=test;Integrated Security=True"))//SqlDataSource1.ConnectionString);
        {
            SqlCommand cmd = new SqlCommand("INSERT INTO dbo.[User] (UserName) VALUES (@valueUser)", db);
            cmd.Parameters.Add("@valueUser", SqlDbType.VarChar, 50).Value = valueUser;
            //cmd.CommandType = CommandType.Text;
    
            //User is the name of the table, UserName is the column 
            //cmd.CommandText = "INSERT User (UserName) VALUES (@valueUser)";
    
            //cmd.Connection = db;
    
            db.Open();
    
            try
            {
                //cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                /*Label1.Text =*/
                Console.WriteLine("Success writing into database!");
                //Label1.Visible = true;
            }
            catch (Exception ex)
            {
                /*Label1.Text =*/
                Console.WriteLine("Error writing into database.");
                Console.WriteLine(ex.Message);
                //Label1.Visible = true;
            }
            //finally
            //{
                //db.Close();
            //}
        }
    }