调整初学者C#SQL Server插入示例以使用我的数据库

调整初学者C#SQL Server插入示例以使用我的数据库,c#,asp.net,.net,sql-server,database,C#,Asp.net,.net,Sql Server,Database,我已经阅读了大量关于我的问题的教程、文章和其他内容,老实说,由于我缺乏经验,我无法对这一点指手画脚,所以我希望你们中的一些人能帮助我:) 我正在做一个项目(只是为了学习如何编程,所以它可能是非常基本的),但我有一个“新闻”页面,可以使用GridView更新和删除数据 现在我想使用3个文本框和1个提交按钮将一些内容插入我的数据库 我有3行必须插入: 标题 日期 内容/新闻本身 从connectionstring:BoligstJerneConnectionString存储在NyhedTB下 我的查

我已经阅读了大量关于我的问题的教程、文章和其他内容,老实说,由于我缺乏经验,我无法对这一点指手画脚,所以我希望你们中的一些人能帮助我:)

我正在做一个项目(只是为了学习如何编程,所以它可能是非常基本的),但我有一个“新闻”页面,可以使用
GridView
更新和删除数据

现在我想使用3个文本框和1个提交按钮将一些内容插入我的数据库

我有3行必须插入:

  • 标题
  • 日期
  • 内容/新闻本身
  • 从connectionstring:BoligstJerneConnectionString存储在NyhedTB下

    我的查询如下所示:

    INSERT INTO [NyhedTB] ([NyhedDato], [NyhedTitel], [NyhedTekst])
    VALUES (@NyhedDato, @NyhedTitel, @NyhedTekst)
    
    我在互联网上读到这段代码对我来说很神奇(我必须插入我自己的ofc值):

    我看了这段代码,觉得应该很简单,但实际上,我想不出来

    这里有一些建议,让你去,学习编程是很多 反复试验

  • 从basic开始,在表单/页面和 按钮

  • 双击按钮以查看代码并查看按钮 单击事件

  • 粘贴问题附带的代码体(try-catch中的所有内容)

  • 在“公共作废”按钮上放置一个断点,单击代码行并按F11键 逐步完成代码

  • “有一件事是代码可以正常工作,但如何让按钮和文本框正常工作仍然是一件痛苦的事情”*

    将文本框作为值而不是硬编码的值:

    cmd.Parameters.AddWithValue(“@Address”,textBox1.Text)

    您也不应该插入Id值,而应该修改EmployeeDetails表,并在属性集Identity Specification(IS Identity)=True中将Id列设置为。然后右键单击ID列并设置主键

    在这里发布您遇到的任何错误消息,当您确实让它工作时,另一个练习(对您来说非常有价值)将使用数据库存储过程而不是临时SQL来安全防范SQL注入攻击


    我假设您安装了SQL Server,并且有一个名为EmployeeDetails的“employee”数据库。

    这相当简单。您只需修改连接字符串、查询及其参数:

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            string connectionString =
                "server=SQLServer;" +         // SQLServer is your SQL server machine
                "initial catalog=employee;" + // employee is your database
                "user id=sa;" +               // sa is the login to connect the database
                "password=sa123";             // sa123 is the password of the login
            using (SqlConnection conn =
                new SqlConnection(connectionString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(
                    "INSERT INTO [NyhedTB] ([NyhedDato], [NyhedTitel], [NyhedTekst]) " +
                    "VALUES (@NyhedDato, @NyhedTitel, @NyhedTekst)", conn))
                {
                    cmd.Parameters.AddWithValue("@NyhedDato", textBoxDate.Text);
                    cmd.Parameters.AddWithValue("@NyhedTitel", textBoxTitle.Text);
                    cmd.Parameters.AddWithValue("@NyhedTekst", textBoxBody.Text);
    
                    int rows = cmd.ExecuteNonQuery();  // Inserted rows number
                }
            }
        }
        catch (SqlException ex)
        {
            //Log exception
            //Display Error message
        }
    }
    

    我根据您的要求修改了示例代码并添加了注释,希望您能更清楚地了解发生了什么:

    static void Insert()
    {
        try
        {
            string connectionString =
            "server=.;" +
            "initial catalog=MyDatabaseName;" + //here you write database name where your NyhedTB table is
            "user id=sa;" + //user name to connect to database
            "password=sa123"; //password
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                using (SqlCommand cmd =
                  new SqlCommand("INSERT INTO NyhedTB (NyhedDato, NyhedTitel, NyhedTekst) VALUES (@NyhedDato, @NyhedTitel, @NyhedTekst)", conn))
                {
                    //all "things" in your sql command what beggins with @ 
                    //means that it is parameter and you need to pass values for these parameters: 
                    //For @NyhedDato parameter you set text from your textbox
                    cmd.Parameters.AddWithValue("@NyhedDato", txtDate.Text);
    
                    //For @NyhedTitel parameter you set text from title textbox
                    cmd.Parameters.AddWithValue("@NyhedTitel", txtTitle.Text);
    
                    //For @NyhedTekst parameter you set text from content textbox
                    cmd.Parameters.AddWithValue("@NyhedTekst", txtContent.Text);
    
                    //Execute insert command and get how many records was efected, in this case it should be rows = 1 because you inserting just one record
                    int rows = cmd.ExecuteNonQuery();
                }
            }
        }
        catch (SqlException ex)
        {
           //Log exception
           //Display Error message
        }
    }
    
    p.s.代码未经测试。当你说

    我有3行必须插入: 大字标题 日期 内容/新闻本身


    实际上,你的意思是你想用
    字段插入
    记录

    哦,这是C!对不起,我将编辑我的帖子。你有错误吗?若代码进入“catch”部分,那个么什么是异常消息?如果不是,ExecutOnQuery后的“行”值是多少?。。。那么,你的问题是什么?如果你用代码示例中的查询替换你的查询,会发生什么?好的,我已经更改了代码,所以我相信它适合我的:嘿!(顺便说一句,你已经帮了我,因为我不知道代码应该在按钮后面的代码中!)我按照你说的做了,伙计,我想我找到了一些东西(如果我做得对的话,呵呵)。当调试器转到my:connection string:string connectionString=“server=PCM12443\\SQLEXPRESS;”“+”initial catalog=BoligStjernen;”“+”user id=sa;“+”password=rozweba”;--但数据库中似乎没有插入任何内容。我没有安装Northwind数据库,我只是将值更改为我自己的数据库中的值:)继续按F11单步执行代码,当出现问题时,您将看到详细信息异常。当你把F11放在接头上时会发生什么;代码行?如果失败,请确保您的连接字符串正确,创建一个文本文件(a.txt)将扩展名重命名为udl(a.udl)->连接到数据库,当您可以从“数据链接属性”窗口成功连接时,将文件重命名回a.txt,并在“Provider=SQLNCLI.1;”之后将所有内容重命名为a.txt是正确的连接字符串。唯一出现“异常”或“红色图标”的地方是Catch(SqlException ex)之后,它的内容是:{System.Data.SqlClient.SqlException(0x80131904):从字符串转换日期和/或时间时,转换失败。(由于消息太长,我无法输入更多代码)@MikeBertelsen-我能给你的最好建议是拿起一本关于ASP.Net编程的入门书。伙计,我们都在一个阶段完成了,这样你至少可以从正确的角度出发-让你更容易地拼凑出如此复杂的数学、科学、艺术和技术的融合。只需为约会伙伴使用一个日历控件:)干杯,奥蒂尔!呵呵,是的,如果你知道怎么做的话,这很简单,但是谢谢你提供的代码。我想我也是这么做的,但是它似乎没有任何问题,我想知道我是如何告诉我的按钮,我的3个文本框中的值应该插入到数据库中的?我似乎找不到任何迹象表明当前隐藏的代码是se为任何文本框设置拱形?(同样,缺乏知识:))@MikeBertelsen:好的。请看我编辑过的答案。若要获取
    文本框的值,请使用属性。若要在单击按钮时执行代码,请使用。啊,我已经在这里学到了一些新东西,我不知道它被称为单击事件……但当我单击我的按钮时,页面会快速闪烁白色,仅此而已。我相信(虽然我不确定)我的问题是我的连接字符串中的服务器。因为我已经做了你们专家推荐的所有其他事情。啊,它工作了!!我浏览了所有这些评论,真的,我从他们那里学到了很多!我的问题首先是,我的“NyhedaDate”作为数据库中的“日期时间”,所以我改变了
    
    protected void GvManualShows_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //label lbl = (label)e.Row.FindControl("lblHidden");
            if (e.Row.Cells[14].Text == "Y")
            {
                // CheckBox cb = (CheckBox)e.Row.FindControl("chk");
    
                CheckBox chk = (CheckBox)e.Row.Cells[0].FindControl("chkBox");
                chk.Checked = true;
    
            }
        }
    }
    
    protected void GvManualShows_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //label lbl = (label)e.Row.FindControl("lblHidden");
            if (e.Row.Cells[14].Text == "Y")
            {
                // CheckBox cb = (CheckBox)e.Row.FindControl("chk");
    
                CheckBox chk = (CheckBox)e.Row.Cells[0].FindControl("chkBox");
                chk.Checked = true;
    
            }
        }
    }