1

我是一名 17 岁的软件工程专业学生,无法将我的 sql 数据库链接到我的 C# Win 应用程序。我能够使用访问数据库完成此任务,但数据库需要在 SQL 中。任何帮助将不胜感激!我到目前为止的代码是:

Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Data.OleDb; // all Non-SqlServer Databases ie oracle, access, sqlLite
using System.Configuration;

namespace SqlWinApp
{
    public partial class Form1 : Form
    {
        // Declare and init data objects
        // Connect to an external data source
        //OleDbConnection cnDataCon =
        //    new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=H:/SEWD/ASP/dataTestJr/App_Data/dbWaxStax.accdb");
        SqlConnection cnDataCon =
           new SqlConnection(ConfigurationManager.ConnectionStrings["cnExternalData"].ConnectionString);
        // dataset: Container object for data tables  
        DataSet dsData = new DataSet();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                cnDataCon.Open();
                {
                    loadDdlTitles();
                }
            }
            catch (Exception errDesc)
            {
                string strMsgError = "Error encountered on open: " + errDesc.Message.ToString().Replace('\'', ' ');
                MessageBox.Show(@"<script language='javascript'>alert('" + strMsgError + "')</script>");
                MessageBox.Show(@"<script language='javascript'>alert('Application will terminate')</script>");
                return;
            }
        }
        private void loadDdlTitles()
        {
            //Response.Write(@"<script language='javascript'>alert('loadDDlTitles')</script>");
            // store sql into a string in order to be utilized at a later time.
            string strSqlTitles = "SELECT * FROM tblTitles ORDER BY title";
            // data adapters act as data filters
            OleDbDataAdapter daTitles = new OleDbDataAdapter();
            // command syncs the data source with the filter (data sdapter) and readies it for instantiation
            OleDbCommand cmNameTitles = new OleDbCommand(strSqlTitles, cnDataCon);
            // select command syncs the filter with the data 
            daTitles.SelectCommand = cmNameTitles;
            try
            {
                daTitles.Fill(dsData, "tblTitlesInternal"); // blow pt.
            }
            catch (Exception errDesc)
            {
                string strMsgError = "Error encountered in data adapter object: " + errDesc.Message.ToString().Replace('\'', ' ');
                MessageBox.Show(@"<script language='javascript'>alert('" + strMsgError + "')</script>");
                MessageBox.Show(@"<script language='javascript'>alert('Application will terminate')</script>");
            }
            // Connect control obj to datasource and populate 
            ddlTitle.DataSource = dsData.Tables["tblTitlesInternal"];
            ddlTitle.DisplayMember = "nameTitle";
            ddlTitle.ValueMember = "nameTitlesID";
        }

    } 

}

在我的 App.config 我有:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add name="cnExternalData" connectionString="Data Source=|DataDirectory|215-6576.All-Purpose Handyman.dbo; Provider=Microsoft.ACE.OLEDB.12.0" />
    <add name="SqlWinApp.Properties.Settings.ConnectionString" connectionString="Data Source=215-6576;User ID=sa"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

最后,我的数据库命名为 215-6576.All-PurposeHandyman.dbo,我使用的表命名为 tblTitles。再次提供任何帮助将不胜感激!谢谢!

4

3 回答 3

8

我反复访问的一个非常宝贵的网站是ConnectionStrings.com

假设你已经拥有的一切都是正确的,你只需要在配置文件中修改你的 SQL 连接字符串:

<add name="SqlWinApp.Properties.Settings.ConnectionString" connectionString="Server=215-6576;User ID=sa; Database=All-PurposeHandyman; Password=password"
      providerName="System.Data.SqlClient" />

如果您的 sa 帐户有密码,您还需要在同一 connectionString 属性中通过“Password=[Password]”提供该密码。

编辑

在您的 C# 代码中,您不需要在对 的调用周围使用大括号loadDdlTitles();,您可以安全地删除它们。

编辑2

在修改后的连接字符串中添加了密码属性,以明确它应该如何工作。

于 2013-11-05T17:27:59.743 回答
1

好吧,我马上就看到了 3 个问题(如果我仔细观察,可能会有更多问题)。给你带来麻烦的两个是:

  1. 您仍在调用您的访问连接字符串
  2. 您的 SQL 连接字符串格式不正确。

第三个问题并不严重,但是当您修复 #1 时会很烦人:您的连接字符串名称很长。

因此修改你的sql连接字符串:

<add name = "SqlConnection" connectionString="[yourConnectionStringHere]" />

然后修改你的调用代码:

SqlConnection cnDataCon = 
        new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString);

对于特定的连接字符串,我建议您前往http://connectionstrings.com并查看一下。但它会是这样的:

Server=myServerAddress;Database=myDataBase;User Id=myUsername; Password=myPassword; 
于 2013-11-05T17:31:36.423 回答
0

您需要在连接字符串中包含服务器/机器名称。此链接有一些信息和示例可供使用:

http://msdn.microsoft.com/en-us/library/jj653752%28v=vs.110%29.aspx

于 2013-11-05T17:24:19.577 回答