首页 > 解决方案 > System.InvalidCastException:“从字符串“员工”到类型“布尔”的转换无效。

问题描述

我创建的表单会弹出,但是当我单击打开按钮时会出现此错误。该错误将我引导至 sqlConn.ConnectionString ,因此有关该问题的任何见解都非常有帮助。

     Private Sub updateTable()

    sqlConn.ConnectionString = "server=" + server + ";" + "user id =" = username + ";" _
    + "password= " + password + ";" + "database" = database

    sqlConn.Open()

        sqlCmd.CommandText = "SELECT * From employee.employee"

        sqlRd = sqlCmd.ExecuteReader
        sqlDt.Load(sqlRd)
        sqlRd.Close()
        sqlConn.Close()
        DataGridView1.DataSource = sqlDt

End Sub

标签: mysqlasp.netvb.net

解决方案


您实际上并没有正确阅读您的代码,而是看到了您期望看到的内容,而不是实际存在的内容。这个:

sqlConn.ConnectionString = "server=" + server + ";" + "user id =" = username + ";" _
+ "password= " + password + ";" + "database" = database

由于多种原因是错误的。你真正想写的是这样的:

sqlConn.ConnectionString = "server=" + server + ";" + "user id =" + username + ";" _
+ "password= " + password + ";" + "database=" + database

请注意,您的代码中有三个错误。您需要更加小心,尤其是当您明确知道那是错误的行时。

也就是说,有多种方法可以改进该代码。首先,如果要连接,请Strings使用字符串连接运算符,而不是加法运算符。此外,永远不要连接两个文字:

sqlConn.ConnectionString = "server=" & server & ";user id=" & username & ";password=" & password & ";database=" & database

问题是,您首先犯此错误的原因是,以这种方式连接大量子字符串会使您的代码难以阅读,因此容易出错。我通常只会使用一个连接运算符,或者最多使用两个。如果您需要更多,请使用其他选项。从 .NET 1.0 到最近,该选项将是String.Format

sqlConn.ConnectionString = String.Format("server={0};user id={1};password={2};database={3}",
                                         server,
                                         username,
                                         password,
                                         database)

更具可读性,因此不容易出现您犯的那种错误。在更新的版本中,您还可以选择字符串插值:

sqlConn.ConnectionString = $"server={server};user id={username};password={password};database={database}"

不过,您不应该使用任何这些选项。在构建连接字符串时,请使用适当的连接字符串构建器。所有 ADO.NET 提供程序都有这样的类,Connector/Net 也不例外。我不确定具体的属性会被称为什么,但它看起来像这样:

Dim builder As New MySqlConnectionStringBuilder With {.Server = server,
                                                      .UserID = username,
                                                      .Password = password,
                                                      .Database = database}

sqlConn.ConnectionString = builder.ConnectionString

这仍然不太容易出错。


推荐阅读