[英]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.