Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
如何插入带有“的行”;“自动编号”;字段(ID列)进入Access数据库/C#ASP.NET_Asp.net_Database - Fatal编程技术网

如何插入带有“的行”;“自动编号”;字段(ID列)进入Access数据库/C#ASP.NET

如何插入带有“的行”;“自动编号”;字段(ID列)进入Access数据库/C#ASP.NET,asp.net,database,Asp.net,Database,这是我第一次与DB合作。 我决定创建一个包含两个表的DB——“团队”、“玩家” 我想在“玩家”表中添加一个新玩家。 “Player”表由以下列组成:ID(自动编号)、FirstName、LastName、TeamID 为此,我为FirstName、LastName和TeamID创建了三个文本框 请注意,我没有处理“ID”,因为它是一个自动编号,应该自动添加 单击按钮1\u将最终添加新行 这是我的密码: protected void Button1_Click(object sender,

这是我第一次与DB合作。 我决定创建一个包含两个表的DB——“团队”、“玩家” 我想在“玩家”表中添加一个新玩家。 “Player”表由以下列组成:ID(自动编号)、FirstName、LastName、TeamID

为此,我为FirstName、LastName和TeamID创建了三个文本框 请注意,我没有处理“ID”,因为它是一个自动编号,应该自动添加 单击按钮1\u将最终添加新行

这是我的密码:

    protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
            connection = new OleDbConnection(connectionString);
        }
        catch
        { }
        try
        {
            connection.Open();

            OleDbCommand command = new OleDbCommand("INSERT INTO Player VALUES ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "')");

            command.ExecuteNonQuery();

            connection.Close();

        }
        catch
        { }

如果TeamID是一个数字,则不需要在其周围加引号

OleDbCommand command = new OleDbCommand("INSERT INTO Player VALUES ('" + TbFirstName.Text + "','" + TbLastName.Text + "'," + TbTeamID.Text + ")");
注意:我重命名了文本框以减少歧义

虽然这可能是您的第一次尝试,但您应该真正清理您的输入。至少创建一个函数,用双单引号替换单引号

protected string SanitizeSQL(string txt) {
   return txt.replace("'", "''");
}


OleDbCommand command = new OleDbCommand("INSERT INTO Player VALUES ('" + SanitizeSQL(TbFirstName.Text) + "','" + SanitizeSQL(TbLastName.Text) + "'," + SanitizeSQL(TbTeamID.Text) + ")");

编写不包含列名的插入字符串时,应指定值中的每一列。在您的情况下,您需要添加

 string sqlText = "INSERT INTO Player (FirstName, LastName, TeamID) VALUES ('" 
                  + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "')"); 
然而,由于另一个原因,该代码是错误的。切勿编写连接用户键入的输入文本的sql字符串。这将导致错误,或者更糟的是,导致

还有一个问题。如果TeamID字段是数值字段,则需要将textbox3.text输入转换为数值,以正确使用AddWithValue方法

        int teamID;
        if(!Int32.TryParse(textBox3.Text, out teamID))
             throw new ArgumentException("Type a valid TeamID number, please!");
        command.Parameters.AddWithValue("@team", teamID);

insert命令应指定要更新的列,因此应为:

INSERT INTO Player(FirstName,LastName,TeamID) VALUES ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "')"

还请注意,将用户输入的文本直接连接到查询中会导致sql注入攻击。

注意,我没有处理“ID”,因为它是一个自动编号,应该自动添加。您似乎在告诉我们答案。问题是什么?当问问题时,你应该明确指出你在适用的错误消息方面遇到了什么问题(如果合适)。关于这个问题的答案似乎有一系列很好的猜测,但你不应该让人们去猜测。空的捕鼠器是邪恶的。他们阻止你告诉我们你的问题是什么,在哪里。顺便说一句:如果TeamID列是一个数字,TextBox3。文本不应该在单引号内。在参数化版本上做得很好。我懒得去确认正确的语法你不需要在字段名周围加括号吗?非常感谢大家,我确实添加了一个问题,但不知怎么的,它消失了(我是这里的noob)
INSERT INTO Player(FirstName,LastName,TeamID) VALUES ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "')"