【问题标题】:Using C# to Insert lines from an array into SQL Server 2012使用 C# 将数组中的行插入 SQL Server 2012
【发布时间】:2014-01-25 01:35:05
【问题描述】:

之前我发布了这段代码,但它更加混乱,部分被注释掉了,我使用连接插入到数据库中。我被告知要清理它,挑战使用参数,并提出更简洁的问题。话虽如此,与数据库的连接是通过带有一些直接命令的大部分伪代码提供给我的。

1) 我的 Try-Catch 设置是否正确?

2) "server = LOCALHOST" 下划线为红色,表示无法将 'string' 转换为 System.Data.SqlClient.SqlConnection'

3) “Database” 和 “Lab1” 下划线表示它在当前上下文中不存在?这是什么意思?

4) “Trusted_connection”和“yes”与#3 有相同的错误信息。

5) 我不知道在“cmd.Connection =”后面放什么,这就是为什么它被注释掉并且后面有一个问号。

6) 是我的 varname1.Close();在正确的位置?我觉得它实际上放在最后两个右括号之间是有意义的?

7) 在 Catch 中,“SqlException”带有下划线,错误为“找不到类型或命名空间 SqlException”。我在 stackoverflow 上从另一个用户那里找到了一个 try-catch,它提出了这个问题,有人用这样设置的 catch 做出了回应,所以我复制了它。

8) 我正在尝试计算参数,我的设置是否正确?我所拥有的只是 1 个文本框,用户在其中输入数据并将其输入到数组中。 “姓名”是数据库中学生的属性名称,我只是把@Name编成一个变量?我在 stackoverflow 上也从另一个用户那里找到了一个参数示例,并且与我的匹配。

public static int counter = 0;
protected void btnDisplay_Click(object sender, EventArgs e)
{
    try
    {
        System.Data.SqlClient.SqlConnection varname1 = new System.Data.SqlClient.SqlConnection();
        varname1 = "server = LOCALHOST";
        Database = Lab1; 
        Trusted_connection = yes;
        varname1.Open();
        System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
       // cmd.Connection = (?)
        cmd.CommandText = "Delete From Student";
        cmd.ExecuteNonQuery();

     for(int i=0; counter >= i; i++)
     {
        cmd.CommandText = "INSERT INTO Lines (Name) " + "VALUES (@Name)";
        cmd.Parameters.AddWithValue("@Name", studentList[i]);
            counter++;
     }
    varname1.Close();
   }
    catch (SqlException ex)
    {
        lbl5.Text = "Connection could not be established";
    }
}

【问题讨论】:

    标签: c# asp.net sql sql-server try-catch


    【解决方案1】:

    您需要找到一个好的资源(或几个)并学习如何进行正确的数据库调用。 Here's one.Here's another, on creating connection strings.

    我还没有测试过以下内容,但是这样的东西应该可以工作。

    using (var conn = new System.Data.SqlClient.SqlConnection("Server=LOCALHOSTDatabase=Lab1;Trusted_Connection=True;"))
    {
        conn.Open();
    
        using (var cmd = new SqlCommand("Delete From Student", conn))
        {
            cmd.ExecuteNonQuery();
        }
    
        using (var cmd = new SqlCommand("INSERT INTO Lines (Name) VALUES (@Name)", conn))
        {
            for (int i = 0; counter >= i; i++)
            {
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@Name", studentList[i]);
                cmd.ExecuteNonQuery();
            }
            counter++;
        }
    }
    

    至于您的其他一些问题...

    #1 - 您的 try/catch 设置正常。

    #6 - 不要打扰Close() - 使用using

    #7 - 异常名称看起来不错。您的表单顶部有using System.Data.SqlClient; 吗?由于其他代码行有错误,您可能会在这里遇到错误......很难说。

    #8 - 看起来不错。

    【讨论】:

    • 嗨,我附加了代码,它说在所有“SqlCommand”下找不到命名空间名称“SqlCommand”的类型。另外,我没有使用 System.Data.SqlClient,但它会出现错误,除非我将它放在
    • 2 个问题,如果您不介意的话。现在,当我在网页中打开它时,它显示“使用 System.Data.SqlClient;在顶部,在我的标签/文本框上方。第二件事是,它仍然没有连接,我以为我的 SQL 服务器是 LOCALHOST,但是它说连接是“IDEA-PC\LOCALHOST”,但是当我输入“server=IDEA-PC\LOCALHOST”时,它会在 LOCALHOST 的 L 下放置一个错误并显示“无法识别的转义序列”
    • 顶部没有任何其他 using 语句,您让我输入的 using 语句之上的唯一内容是 <%@ Page Title="Home Page" Language="C#"%> 我相信它现在让我连接!在您提供的代码中,尽管它给了我这个错误。这是源错误:Line 67: cmd.ExecuteNonQuery();,它说:异常详细信息:System.Data.SqlClient.SqlException:无效的对象名称'Lines'
    • 哦,我明白了。好的,是的,我的表没有命名为 Lines,所以我改变了它,但它现在给了我这个错误。 Exception Details: System.Data.SqlClient.SqlException: The parameterized query '(@Name nvarchar(4000))INSERT INTO Student (Name) VALUES (@Name)' expects the parameter '@Name', which was not supplied. 第 68 行突出显示了它呈现给我的这段摘录:` 第 66 行:cmd.Parameters.Clear();第 67 行:cmd.Parameters.AddWithValue("@Name", studentList[i]);第 68 行:cmd.ExecuteNonQuery();`
    • 没关系,只有当我单击整个连接的次数超过数组中的项目数时才会发生这种情况。发生这种情况的原因是因为我无法判断是否发生了任何事情。浏览器似乎只是“挂起”,所以我又点击了几次。如何验证连接是否已建立?我打开 SQL Server 并检查了表,但它看起来没有添加任何项目..
    【解决方案2】:
    1. 你的 try-catch 应该有一个 finally 块
    2. 您的 SQLConnection 应该使用连接字符串作为参数来创建。您不能将它设置为等于字符串,它是一个 SQLConnection。
    3. 我不知道 Database 和 Lab1 是在哪里声明的,但它显然不在您的函数范围内。
    4. 参见 3。yes 没有任何意义。
    5. cmd.Connection = varName1
    6. 您应该在 finally 块中关闭连接,以确保即使抛出异常也关闭它
    7. 您是否导入了 System.Data.SQLClient?
    8. 使用值添加参数会将 SQL 字符串中的 @Name 替换为您提供的值

    【讨论】:

    • 1) 好的,我会查看并设置它 2) 看起来像这样吗?` System.Data.SqlClient.SqlConnection varname1 = new System.Data.SqlClient.SqlConnection("server= LOCALHOST");` 3) 我不知道我必须声明 Database ,那会是什么样子? 4) 我认为我没有导入 System.Data.SQLClient,我该怎么做?
    • 1) 声明应该是这样,但我怀疑您的连接字符串会出现问题。 3)我不确定你想用数据库做什么。 4) 在 C# 中,您将“使用 System.Data.SQLClient”放在文件的顶部。
    猜你喜欢
    • 1970-01-01
    • 2014-02-15
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2017-06-25
    • 1970-01-01
    • 2020-05-26
    相关资源
    最近更新 更多