不能隐含转换类型错误

时间:2016-08-22 13:54:11

标签: c# executereader

尝试使用来自数据库的数据填充Combobox,并且我使用如下的ExecuteReader,但是当我尝试实例化我的连接时,它显示错误

  

无法隐式转换类型错误

我的DBConnect类代码:

public class DBConnect
{
        private SqlConnection connection;
        private string servername = "10.1.76.109,1433";
        private string database = "EngLib";
        private string dbuser;
        private string userpassword;


        public DBConnect()
        {

        }

        public void doDBConnect(string dbuserform, string userpasswordform)
        {
            dbuser = dbuserform;
            userpassword = userpasswordform;
        }


        public void Initialize()
        {

        }

        public bool openConnection()
        {
            string connectionString;
            connectionString = "Server=" + servername + ";Database=" + database + ";user id=" + dbuser + ";Password=" + userpassword;
            Console.WriteLine(connectionString);
            connection = new SqlConnection(connectionString);
            try
            {
                connection.Open();
                return true;
            }
            catch (SqlException ex)
            {
                switch (ex.Number)
                {
                    case 0:
                        MessageBox.Show("Não é possível contactar o servidor. Entre em contato com o administrador");
                        break;

                    case 18456:
                        MessageBox.Show("Usuário/Senha inválidos, tente novamente");
                        break;
                }
                return false;
            }

}

我的表单代码:

{
    public Form2()
    {
        InitializeComponent();
    }

    public void Form2_Load(object sender, EventArgs e)
    {
        SqlDataReader rdr = null;
        DBConnect sqlConnection;
        sqlConnection = new DBConnect();
        sqlConnection.doDBConnect(dbuserform: "usertest", userpasswordform: "usertest");
         {
            try
            {

                {
                    sqlConnection.openConnection();
                    SqlCommand sqlCmd;
                    sqlCmd = new SqlCommand("SELECT Material FROM EngLib");
                    sqlCmd.Connection = sqlConnection;
                    SqlDataReader sqlReader = sqlCmd.ExecuteReader();

                    while (sqlReader.Read())
                    {
                        comboBox1.Items.Add(sqlReader["Material"].ToString());
                    }

                    sqlReader.Close();
                }
            }
            finally
            {
                // close the reader
                if (rdr != null)
                {
                    rdr.Close();
                }
            }
        }
    }
}

代码中的用户和密码只是暂时的。

1 个答案:

答案 0 :(得分:1)

我认为问题在于:

DBConnect sqlConnection;
SqlCommand sqlCmd;
sqlCmd.Connection = sqlConnection;

SqlCommand期望Connection的类型为SqlConnection,但您要分配自己的班级DBConnect

可能的修复:

connection上公开DBConnect属性并使用它。

DBConnect继承SqlConnection

直接使用SqlConnection

另外请注意:您没有在SqlConnection课程中处理DBConnect,这可能导致StackOverflowException。您应该实施IDisposable