繁体   English   中英

使用C#从SQL Server检索radioButton值

[英]retrieving radioButton value from SQL Server using C#

我正在尝试从SQL Server Compact检索数据库中的radioButton值,但是我的代码不起作用,并且显示错误消息( unable to cast object of type 'System.Data.SqlServerCe Command' to type 'System.IConvertible强制转换unable to cast object of type 'System.Data.SqlServerCe Command' to type 'System.IConvertible )。行( genderval = Convert.ToBoolean(gendercmnd); )..怎么了? 谢谢

if (con.State != ConnectionState.Open)
    con.Open();

Boolean genderval = false;
SqlCeCommand gendercmnd = new SqlCeCommand(@"SELECT Gender FROM Std_info WHERE Std_id='" + TextBox1.Text + "'", con);
genderval = Convert.ToBoolean(gendercmnd);
if (genderval == true)
    Convert.ToBoolean(radioButton1.Checked);
else
    Convert.ToBoolean(radioButton2.Checked);  
con.Close();

尝试执行命令

genderval = (Boolean)gendercmnd.ExecuteScalar();

另请注意,您的查询应参数化。 这是一个完整的示例(使用SqlConnection但如果您将Sql类替换为提供程序类,则应该可以使用)

bool genderval;

using (SqlConnection conn = new SqlConnection("youeConnStr"))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT Gender FROM Std_info WHERE Id = @id", conn))
    {
        int id = Convert.ToInt32(TextBox1.Text);
        cmd.Parameters.Add(new SqlParameter("@id", id));
        genderval = (bool)cmd.ExecuteScalar();
    }
}

似乎您尚未实际查询数据库,但正在尝试转换实际命令而不是所收集的结果。

我不确定是否同样适用于SQL Server Compact,但是您需要ExecuteNonScalar执行命令本身,检索结果,然后在上面进行比较。

您是否正在针对数据库执行命令并获得结果? 因为该代码看起来并不像它那样做。 我认为您需要在sqlcecommand上调用ExecuteScalar()。

您想要做的是从SQL Server获得结果,并将其转换为布尔值。

您实际上正在尝试将SQL命令转换为布尔值。

您实际上需要打开与SQL Server的连接并执行查询。 但这要复杂得多...

if (con.State != ConnectionState.Open)
   con.Open();

Boolean genderval = false;
SqlCeCommand gendercmnd = new SqlCeCommand(@"SELECT Gender FROM Std_info WHERE Std_id='" + TextBox1.Text + "'", con);

gendercmnd.Connection.Open(); // Open the connection using the gendercmd string.
sqlReader = gendercmnd.ExecuteReader(); // Execute the read, which returns an SqlCEDataReader object that we can use to access the data. 


genderval = Convert.ToBoolean(gendercmndResult);
            if (genderval == true)
                Convert.ToBoolean(radioButton1.Checked);
            else
                Convert.ToBoolean(radioButton2.Checked);  
con.Close();

现在,我们需要从读者那里获取值,并将其转换为布尔值。

if (con.State != ConnectionState.Open)
   con.Open();

Boolean genderval = false;
String gendercmndResult = null;
SqlCeCommand gendercmnd = new SqlCeCommand(@"SELECT Gender FROM Std_info WHERE Std_id='" + TextBox1.Text + "'", con);

gendercmnd.Connection.Open(); // Open the connection using the gendercmd string.
sqlReader = gendercmnd.ExecuteReader(); returns an SqlCEDataReader object that we can use to access the data.

while (sqlReader.Read(){ //While the reader is reading...
    gendercmndResult = (sqlReader.GetString(0)); //Assign the returned value from the SQL server to a string called gendercmndResult
}


genderval = Convert.ToBoolean(gendercmndResult); //Now we can cast the string as a bool
            if (genderval == true)
                Convert.ToBoolean(radioButton1.Checked);
            else
                Convert.ToBoolean(radioButton2.Checked);  
con.Close();

最终的解决方案..!

//........ retrieving radioButton value ....... 

if (conn.State != ConnectionState.Open) 
      conn.Open(); 
try { 
       Boolean genderval = SqlCeCommand gendercmnd = new SqlCeCommand(@"SELECT Gender FROM Std_Info     WHERE Std_id='" + TextBox1.Text + "'", con); 

genderval = (Boolean)gendercmnd.ExecuteScalar(); 

if (genderval == true) 
    Convert.ToBoolean(radioButton1.Checked=true); 
else 
    Convert.ToBoolean(radioButton2.Checked = true); 
conn.Close(); 
     } 
catch (Exception ex)
     {
          MessageBox.Show(ex.Message);
     }

谢谢大家的帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM