【问题标题】:C# Sql Connection StringC# Sql 连接字符串
【发布时间】:2013-11-05 17:21:37
【问题描述】:

我是一名 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。再次提供任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 另外,就像使用 sa 的旁注一样,这是一种普遍的不良做法。
  • sql server 正在运行吗?你能从管理专业的学生那里登录数据库吗?
  • 是的,给我带来麻烦的代码是: SqlConnection cnDataCon = new SqlConnection(ConfigurationManager.ConnectionStrings["cnExternalData"].ConnectionString); SqlConnection 是错误代码,它说“找不到类型或命名空间名称‘SqlConnection’(您是否缺少 using 指令或程序集引用?)

标签: c# sql sql-server database winapp


【解决方案1】:

我经常访问的一个非常宝贵的网站是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(); 的调用不需要大括号,您可以安全地删除它们。

EDIT2

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

【讨论】:

  • 嗨,我遇到的唯一问题是当我尝试添加密码属性时, 这段代码现在给了我错误。
【解决方案2】:

嗯,我马上就发现了 3 个问题(如果我仔细观察,可能会有更多问题)。给您带来麻烦的两个是:

  1. 您仍在调用 Access 连接字符串
  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; 

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      相关资源
      最近更新 更多