【发布时间】:2017-07-10 03:49:07
【问题描述】:
我一直在尝试制作一个简单的表格来做一个小的计算并在之后连接到数据库。
我正在使用我的电脑(64 位操作系统 Win 10 Pro)。我有 VC# 2008 和 VC# 2017 RC。
我的第一个问题是我无法在我的(64 位操作系统)PC 上构建或调试 VC#2008 版本的 .sln 文件。我附上了截图。它说:
jet.4.0 未在您的本地计算机中注册。
我的第二个问题是我似乎无法将 VC#2017 RC 表单中的任何数据添加到数据库中。它说connectstate.Open(); 未处理的错误。
这里是代码sn-p
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Tenant_Bill_Generator
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
OleDbConnection connect = new OleDbConnection();
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'billdata._Billdata' table. You can move, or remove it, as needed.
this.billdataTableAdapter.Fill(this.billdata._Billdata);
billdataBindingSource.DataSource = this.billdata._Billdata;
}
private void btnSave_Click(object sender, EventArgs e)
{
connect.ConnectionString=@"Provider=Microsoft.JET.OLEDB.4.0;
Data Source=C:\Users\GCL\Documents\Visual Studio 2017\Projects\Tenant Bill Generator\Tenant Bill Generator.accdb";
double con_unit = 0, bill = 0, presr = 0, prevr = 0, fmem = 0;
double noso = 0, noda = 0, re_la = 0, mcon_unit = 0, totalbill = 0, perunitcost = 0;
presr = double.Parse(txtPresentMeterReading.Text);
prevr = double.Parse(txtPreviousMeterReading.Text);
con_unit = double.Parse(txtMainConsumedUnit.Text);
mcon_unit = ((presr) - (prevr));
lblConsumedUnit.Text = Convert.ToString(mcon_unit);
if (con_unit < 75)
{
bill = con_unit * 3.8;
}
else if (con_unit < 200)
{
bill = (75 * 3.8) + ((con_unit - 75) * 5.14);
}
else if (con_unit < 300)
{
bill = (75 * 3.8) + (125 * 5.14) + ((con_unit - 200) * 5.36);
}
else if (con_unit < 400)
{
bill = (75 * 3.8) + (125 * 5.14) + (100 * 5.36) + ((con_unit - 300) * 5.63);
}
else if (con_unit < 600)
{
bill = (75 * 3.8) + (125 * 5.14) + (100 * 5.36) + (100 * 5.63) + ((con_unit - 400) * 8.70);
}
else if (con_unit < 600)
{
bill = (75 * 3.8) + (125 * 5.14) + (100 * 5.36) + (100 * 5.63) + (200 * 8.70) + (con_unit * 9.98);
}
else bill = (75 * 3.8) + (125 * 5.14) + (100 * 5.36) + (100 * 5.63) + (200 * 8.70) + ((con_unit - 600) * 9.98);
lblTotalBill.Text = Convert.ToString(totalbill);
string rn = txtRoomno.Text;
string mob = txtMonthofBilling.Text;
string pmr = txtPresentMeterReading.Text;
string rwt = txtMainConsumedUnit.Text;
string prevmr = txtPreviousMeterReading.Text;
connect.Open();
OleDbCommand cmd = new OleDbCommand("INSERT into userdata(Roomno,MonthofBilling,PresentReading,PreviousReading,ConsumedUnit,TotalBill,MainConsumedUnit)"
+ "Values(@rn,@mob,@pmr,@rwt,@prevmr,lblConsumedunit.Text,lblTotalBill.Text)", connect);
if (connect.State == ConnectionState.Open)
{
cmd.Parameters.Add("@rn", OleDbType.Char, 20).Value = rn;
cmd.Parameters.Add("@mob", OleDbType.Char, 100).Value = mob;
cmd.Parameters.Add("@pmr", OleDbType.Char, 100).Value = pmr;
cmd.Parameters.Add("@rwt", OleDbType.Char, 100).Value = rwt;
cmd.Parameters.Add("@prevmr", OleDbType.Char, 100).Value = prevmr;
cmd.Parameters.Add("lblConsumedUnit.Text", OleDbType.Char, 100).Value = lblConsumedUnit.Text;
cmd.Parameters.Add("lblTotalBill.Text", OleDbType.Char, 100).Value = lblTotalBill.Text;
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("Data Added To Database");
txtRoomno.Text = "";
txtMonthofBilling.Text = "";
txtPresentMeterReading.Text = "";
txtPreviousMeterReading.Text = "";
lblConsumedUnit.Text = "";
txtMainConsumedUnit.Text = "";
lblTotalBill.Text = "";
connect.Close();
}
catch (Exception expe)
{
MessageBox.Show(expe.Source);
connect.Close();
}
}
else
{
MessageBox.Show("Connection Failed");
}
}
}
}
注意:我无法找到连接处于打开状态的位置。我已经用过 try/catch 块了。
【问题讨论】:
-
“未处理的错误”本身并不是错误消息。它告诉你有 is 错误,但你没有处理它。所以当时唯一的建议是处理错误。通常这可以通过
try/catch块来完成。通过处理错误,您可以确定实际错误是什么,然后采取措施纠正它。 -
如果它正在抛出异常,并且您想捕获该异常,那么是的......它应该在带有适当
catch的try块内。 -
请不要截取你的代码,总是给 SO 文本,格式正确以显示在代码块中。
-
看看this SO Post,看看能不能帮到你。
-
@KhandkarAsifHossain:
"What should I do now?"- 你应该更正这些错误。注意:这里没有人知道这些错误是什么,因为您没有告诉我们。