我有一个winforms应用程序,我试图在tableadapter中传递5个参数以执行查询,但是我得到的错误“不能从'int?‘转换到'int’,它们都可以是空的。”
private int? c_id ;
private string c_cn;
private int? c_afm;
private string c_job;
private string c_city;
private void btnView_Click(object sender, EventArgs e) {
c_id = (txtBox_id.Text != string.Empty) ? c_id = Convert.ToInt32(txtBox_id.Text) : c_id = null;
c_afm = (txtBox_afm.Text != string.Empty) ? c_afm = Convert.ToInt32(txtBox_afm.Text) : c_afm = null;
c_cn = (txtBox_cn.Text != string.Empty) ? c_cn = txtBox_cn.Text : c_cn = null;
c_job = (txtBox_job.Text != string.Empty) ? c_job = txtBox_job.Text : c_job = null;
c_city = (txtBox_job.Text != string.Empty) ? c_city = txtBox_city.Text : c_city = null;
this.clientBrowserTableAdapter.Fill(erpDataSet.PelatesBrowser,c_id,c_cn,c_afm, c_job,c_city);
}问题在于c_id和c_afm参数。有什么想法吗?
发布于 2018-08-19 07:01:21
可以创建将字符串转换为int?的专用方法。
private int? ConvertToDbInt(string text)
{
if (string.IsNullOrEmpty(text))
{
return null;
}
return int.Parse(text);
}然后将其用于不同的变量。
c_id = ConvertToDbInt(txtBox_id.Text);
c_afm = ConvertToDbInt(txtBox_afm.Text);您的实际问题是,条件运算符?:希望正表达式和负表达式都产生相同类型的值,在这种情况下,值为int -表示为正,而int?为负值。
first_expression和second_expression 的类型必须是相同的,或者必须存在从一种类型到另一种类型的隐式转换。
如果您非常喜欢条件运算符?:,那么只需确保这两个表达式返回相同的类型,在您的情况下是int?。
c_id = (txtBox_id.Text != string.Empty) ? (int?)Convert.ToInt32(txtBox_id.Text) : null;当在this.clientBrowserTableAdapter.Fill(...上抛出异常时,这意味着Fill方法需要int类型的参数,您可以通过调用.GetValueOrDefault()轻松地将可空int转换为int。
this.clientBrowserTableAdapter.Fill(
erpDataSet.PelatesBrowser,
c_id.GetValueOrDefault(),
c_cn,
c_afm.GetValueOrDefault(),
c_job,
c_city);发布于 2018-08-19 06:38:24
clientBrowserTableAdapter.Fill正在等待一个int。您正在传递一个Nullable<int>,它们是不一样的,并且没有发生隐式转换。您需要将其转换为int i.(int)c_id或使用Nullable<T>的.Value属性。如果c_id为null,则必须处理这种情况,否则在转换时会出现异常。
顺便提一句,您的任务稍微差了一点,您可以这样做:
c_id = (txtBox_id.Text != string.Empty) ? Convert.ToInt32(txtBox_id.Text) : (int?)null;;https://stackoverflow.com/questions/51915040
复制相似问题