如何从数据表中将字符串转换为int32?

时间:2015-03-16 23:58:47

标签: c# sql sql-server visual-studio-2013

我通过尝试将字符串(电影名称)转换为int32(电影ID#)来解决此问题,当我输入电影名称以打印其电影ID号时。我在这里做错了吗?如上所述,它会导致错误:

  

无法将“System.Data.SqlClient.SqlConnection”类型的对象强制转换为“System.IConvertible”

我的代码:

string filename, connectionInfo;
SqlConnection db;

this.listBox1.Items.Clear();

filename = "netflix.mdf";

connectionInfo = String.Format(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\{0};Integrated Security=True;", filename);

db = new SqlConnection(connectionInfo);
db.Open();

SqlCommand cmd = new SqlCommand();
cmd.Connection = db;

string moviename = textBox1.Text;

cmd.CommandText = string.Format(
            @"SELECT MovieID FROM Movies                     
              where MovieName = '{0}';", moviename);

SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
db.Close();

int id = System.Convert.ToInt32(cmd);

this.listBox1.Items.Add(id);

2 个答案:

答案 0 :(得分:1)

您的cmd对象不是查询的结果,用于执行查询查看ExecuteReader方法。这将返回一个SqlDataReader对象,用于迭代查询结果。

这是来自MSDN的示例:

using (SqlConnection connection = new SqlConnection(
           connectionString))
{
    connection.Open();

    SqlCommand command = new SqlCommand(queryString, connection);
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}", reader[0]));
    }
}

在此示例中,queryString将是您的查询SELECT MovieID FROM MOVIES WHERE...connection将是您的数据库对象

对象reader可以作为数组(属性索引器)加入,reader[0]包含第一列读取后第一列的值,多次读取后包含第一列的值列迭代SELECT结果行

此外,您不能将字符串强制转换为int,您需要使用int.Parse或TryParse方法将字符串转换为int。

为了将您知道的第一列字符串转换为int,它将是int.Parse((string)reader[0])

答案 1 :(得分:-1)

在我将它转换为int之前,我应该首先执行标量查询。我忘了在命令行后添加ExecuteScalar()行。

       string moviename = textBox1.Text;

        cmd.CommandText = string.Format(
            @"SELECT MovieID FROM Movies                     
              where MovieName = '{0}';", moviename);

        object result = cmd.ExecuteScalar(); //solved my problem!

        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        adapter.Fill(ds);
        db.Close();

        int id = System.Convert.ToInt32(result);

        this.listBox1.Items.Add(id);