【问题标题】:VC# 2017 RC and VC#2008 connection string errorVC#2017 RC 和 VC#2008 连接字符串错误
【发布时间】: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?" - 你应该更正这些错误。注意:这里没有人知道这些错误是什么,因为您没有告诉我们。

标签: c# ms-access


【解决方案1】:

我回来了解决方案。不过,谢谢你们的帮助。

实际上我的问题是我能够使用 vc#2008 构建我的 .sln 文件。当我发现这一点时,我只是更改了 'build on cpu' x86 选项,walla 就像一个魅力一样工作。

然后我亲自研究了很多,然后我发现我使用的 .sln 文件最初是在我的另一台电脑上的 32 位操作系统上创建的。我刚刚复制了文件。

再次感谢您的定向 cmets。

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2010-11-26
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多