与SQL Server的表单连接

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
你好

有人可以提供一些代码示例来帮助我将C#表单连接到受信任的SQL Server(没有用户名或密码,只有服务器名和数据库名)。

谢谢
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
The 精确 您用于VB.NET的连接字符串应适用于C#。您不需要更改任何内容,因为VB.NET和C#都使用相同的SqlConnection类。

恳求您,请发布您正在使用的确切连接字符串,而不是您一直向我们显示的假字符串。

让我再次尝试在VB.NET中对C#所做的事情,看看是否可行,然后再回头。我以为我已经尝试了很多次,但是它连接了VB.NET,但从未连接过C#。对于C#,它总是在cx.open()处停止。不知道为什么。 cx.open()是我用于C#的示例。
 

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
这是您告诉我们您需要使用::的信息 可信连接-SqlConnection-ConnectionStrings.com

但是您的连接字符串适用于CE设备:: CE设备的可信连接-SqlConnection-ConnectionStrings.com

我为您感到困惑,因为您似乎不知道需要哪一个。您要连接到CE设备,实例服务器或SQL Express吗?因为这很重要。

我说的是受信任的连接,因为它不需要用户名和密码。第二个示例需要用户名和密码,如果没有该用户名和密码,则该密码将与我在连接的VB.NET代码中使用的字符串完全相同。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
@约翰·塞 My second example can still be used if you use the correct connection string and change every instance from MySQL to SQL, and that's as simple as removing the word My from MySQL. If you don't want a password, then don't supply one.

The 精确 您用于VB.NET的连接字符串应适用于C#。您不需要更改任何内容,因为VB.NET和C#都使用相同的SqlConnection类。
那是正确的。语言没有区别。如果它不起作用,则说明您在C#代码中所做的与在VB.Net代码中所做的有所不同。
恳求您,请发布您正在使用的确切连接字符串,而不是您一直向我们显示的假字符串。
现在有一个想法。

您是否遵循了此发布说明? //social.technet.microsoft.co...ecting-to-the-sql-server-database-engine.aspx 我在较早之前为您发布了它,它指导您进行故障排除的过程
 

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
The 精确 您用于VB.NET的连接字符串应适用于C#。您不需要更改任何内容,因为VB.NET和C#都使用相同的SqlConnection类。

恳求您,请发布您正在使用的确切连接字符串,而不是您一直向我们显示的假字符串。

我已经尝试了将VB.Net与C#结合使用的许多不同组合,但均无效。我将确切显示我对别名服务器和数据库名称所做的一切,看看我们能解决哪些问题?
 

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
不知道为什么,以前在VB.net中用于连接的内容,但现在没有相同的字符串连接和代码。我收到与C#相同的错误。我不知道为什么

但是我能够连接其他语言,而不仅仅是vb或C#。可以用vb做到这一点。有谁知道为什么,这是因为在网络或服务器端执行的某项操作导致点网框架以前无法连接时无法连接?
 
Last edited:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
待在那儿,直到我在瓶子里找到一个精灵,他可以告诉我您尝试了什么...

您从来没有向我们展示您最近尝试过的两种语言代码,即按要求并排放置并保持可见的连接字符串并排放置。
 

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
待在那儿,直到我在瓶子里找到一个精灵,他可以告诉我您尝试了什么...

您从来没有向我们展示您最近尝试过的两种语言代码,即按要求并排放置并保持可见的连接字符串并排放置。

好吧,我会发布一些内容,但与我已经发布的内容没有太大不同。我能够与VBA连接。也许我需要像在VBA中一样去进行项目设计并在Visual Studio中添加正确的参考?
 

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
The 精确 您用于VB.NET的连接字符串应适用于C#。您不需要更改任何内容,因为VB.NET和C#都使用相同的SqlConnection类。

恳求您,请发布您正在使用的确切连接字符串,而不是您一直向我们显示的假字符串。

跳伞运动员

过去用于VB.NET的内容不再起作用,也许我需要添加参考。
我为VB.NET尝试过并连接。我也尝试为C#做到这一点,但无法将其连接起来。
我回去为VB.NET再次尝试有效的代码,现在它具有与C#中相同的错误消息。
可能是我需要添加引用,有点像VBA,需要添加Microsoft ActiveX数据对象库。

这就是我在VB.NET中使用的

VB.NET:
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.OleDb

Public Class Form1
    Private myC As SqlConnection
    Private mCm As SqlCommand
    Private myR As SqlDataReader
    Private res As String

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        myC = New SqlConnection("初始目录= DB;数据源= serverName;集成安全性= SSPI;")
        mCm = myC.CreateCommand
        mCm.CommandText = "SELECT * FROM table"
        myC.Open()

        myR = mCm.ExecuteReader()
    End Sub
End Class


这就是我在C#中使用的
C#:
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.SqlClient;

namespace WFapp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String connectionstring = null;
            SqlConnection cnn;
            connectionstring = "Data Source = serverName; Initial Catalog = Database; Integrated Security = SSPI";
                cnn = new SqlConnection(connectionstring);
            cnn.Open();
        }
    }
}

请指教 !
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,504
地点
弗吉尼亚州切萨皮克
编程经验
10+
在您的C#连接字符串中,"Initial Catalog" is misspelled.
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,504
地点
弗吉尼亚州切萨皮克
编程经验
10+
我还注意到,您包括了OLEDB。也许您要连接的数据库实际上是OLEDB数据库而不是MSSQL Server数据库?
 

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
我还注意到,您包括了OLEDB。也许您要连接的数据库实际上是OLEDB数据库而不是MSSQL Server数据库?

感谢您的答复。我修复了拼写错误。但这就是我使用的确切连接字符串。 VB.NET对我有用。您认为是什么原因导致它不起作用?可能是未包含的参考。该数据库实际上是Microsoft SQL Server。

我仍然保存了Visual Studio创建的工作的已保存VB.NET代码,但是如何在Visual Studio中打开该代码并将其打开到form.vb和design_form.vb中,并在关闭Visual Studio及其代码后运行它。只想看看它是否再次起作用。我无法解释为什么它无法正常运行。请指教 !
 
已加入
2011年4月23日
留言内容
177
地点
密歇根州兰辛;美国
编程经验
10+
试试这个,添加一个新项目"DataSet" from the "Data"将新项目添加到项目时单击“选项卡”。
添加一个新的TableAdapter并使其生成到您的sql服务器的连接字符串,一旦确认它可以工作(通过添加表),就可以复制该连接字符串(或保留它并仅使用My.Settings)。<connectionstringname>在您的代码中,因为它是项目的一部分),然后在您的代码中使用它。
您甚至可以从项目中删除DataSet,或者学习如何使用它们,这将使您可以使用适当的代码来查询数据,并且由于拥有完善的可视化工具,因此维护起来更简单。
 

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
导入System.IO导入System.Data导入System.Data.SqlClient导入System.Data.OleDb公共类Form1私有myC作为SqlConnection私有mCm作为SqlCommand私有myR作为SqlDataReader私有res作为字符串私有子Button1_Click(发送者作为对象,e作为EventArgs )处理Button1.Click myC = New SqlConnection("初始目录= DB;数据源= serverName;集成安全性= SSPI;")mCm = myC.CreateCommand mCm.CommandText ="SELECT * FROM table" myC.Open()
Skydiver,

过去用于VB.NET的内容不再起作用,也许我需要添加参考。
我为VB.NET尝试过并连接。我也尝试为C#做到这一点,但无法将其连接起来。
我回去为VB.NET再次尝试有效的代码,现在它具有与C#中相同的错误消息。
可能是我需要添加引用,有点像VBA,需要添加Microsoft ActiveX数据对象库。

这就是我在VB.NET中使用的

VB.NET:
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.OleDb

Public Class Form1
    Private myC As SqlConnection
    Private mCm As SqlCommand
    Private myR As SqlDataReader
    Private res As String

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        myC = New SqlConnection("初始目录= DB;数据源= serverName;集成安全性= SSPI;")
        mCm = myC.CreateCommand
        mCm.CommandText = "SELECT * FROM table"
        myC.Open()

        myR = mCm.ExecuteReader()
    End Sub
End Class


这就是我在C#中使用的
C#:
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.SqlClient;

namespace WFapp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String connectionstring = null;
            SqlConnection cnn;
            connectionstring = "Data Source = serverName; Initial Catalog = Database; Integrated Security = SSPI";
                cnn = new SqlConnection(connectionstring);
            cnn.Open();
        }
    }
}

请指教 !
试试这个,添加一个新项目"DataSet" from the "Data"将新项目添加到项目时单击“选项卡”。
添加一个新的TableAdapter并使其生成到您的sql服务器的连接字符串,一旦确认它可以工作(通过添加表),就可以复制该连接字符串(或保留它并仅使用My.Settings)。<connectionstringname>在您的代码中,因为它是项目的一部分),然后在您的代码中使用它。
您甚至可以从项目中删除DataSet,或者学习如何使用它们,这将使您可以使用适当的代码来查询数据,并且由于拥有完善的可视化工具,因此维护起来更简单。

贾加洛布罗萨

感谢您的建议。我是C#的新手,除非提供详细信息或图片,否则我将无法关注。
我不知道“数据集和数据”标签在哪里。请指教
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
文章2解释了如何构造代码(无论示例是针对MySQL的)。 SQL声明的结构相同。将所有MySQL重命名为SQL,并为您的SQL Server提供正确的查询字符串和实例名称,它将连接。您在第30个帖子中发布的内容看起来与我在第2个帖子中推荐的内容完全不同。自从第13个帖子以来,我们一直在询问您使用的确切查询字符串,而我们在其中发布了36个帖子,而您仍然没有 提供了未编辑的查询字符串.

serverName不是SQL服务实例的正确名称。和这个 ::
我还注意到,您包括了OLEDB。也许您要连接的数据库实际上是OLEDB数据库而不是MSSQL Server数据库?
发现充分的跳伞运动员,鹰的眼睛。大声笑我什至忽略了VB代码中隐藏的内容。关于这一点,我认为值得注意以下内容:

集成安全性= true;与OleDb提供程序一起使用时,可能会引发异常。
集成安全性= SSPI;建议使用它,因为它既可以与SQLClient一起使用,也可以与OleDB一起使用。

这些将与SQLClient ::
集成安全性= true;
集成安全性= SSPI;
这将适用于OleDB ::
集成安全性= SSPI;

您需要通过关于该主题的无数建议来回头。
  1. 像我在文章2开头所演示的那样,重组您的代码。
  2. 按原样发布您的实际查询字符串(未编辑)。
  3. 也知道您要连接的是OleDB还是SQLClient。
  4. 为您的命令提供适当的查询语句,然后连接到引用您的连接字符串的新SQL实例。
  5. 你说 ::" 的 database is actually Microsoft SQL server."-因此,最好使用 基于实例的连接字符串 并删除密码。见- SQL服务器连接字符串的.NET Framework数据提供程序-ConnectionStrings.com
从...开始,我就一直在使用数据库。自从我记得大声笑以来,它已经很长时间了!按照建议的步骤,您将获得有效的连接。  ;)
 
Last edited:

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
羊皮

我是C#的新手,我无法像在第二篇文章中那样将其重组,而无需花费更多时间。
我无法发布我的实际查询字符串,服务器和数据库名称是机密的。
我多次告诉您,在我使用并发布的Vb.NET代码中,正是服务器和数据库名称已更改且已经生效的代码。
正如我尝试过的那样,它最近无法正常工作。我不知道为什么它使用相同的确切代码,而现在却不行。我不知道你还要我做什么。我能够使用vba进行连接,因此可以进行远程连接,并且服务器和数据库名称正确。

您能建议您如何将第二篇文章发布到C#或实际上已经将C#连接了吗?
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,504
地点
弗吉尼亚州切萨皮克
编程经验
10+
您当前的VBA代码仍然可以连接吗?

使用Visual Studio Professional或Ultimate,是否可以使用服务器管理器进行连接?

有几件事情要看:
1)防病毒/保姆软件:某些影音和保姆软件产品会阻止应用程序进行出站连接。通常,这些将在每个应用程序的基础上被阻止,因此有可能您的Excel和/或Word中的VBA将成功,因为它们被列入白名单,但您的VB.NET和C#程序却没有。不幸的是,每个AV和保姆产品都具有自己的自定义UI,用于检查和修改此设置。如果您在计算机上具有足够的权限来临时禁用AV和nanny洁具,请尝试运行快速测试以查看在它们全部禁用后是否可以连接。如果可行,请执行消除操作以查看哪一部分"security"软件阻止了您。然后,将其缩小范围,看看是否可以添加任何排除设置以允许您的应用程序建立连接。
2)防火墙设置:您的公司可能已推送了全局防火墙设置,以防止出站连接。我对Windows防火墙设置的了解不足,无法直接将您指向要查看哪些设置。在旧的WinXP和Win7时代,Windows会警告您出站连接,您将有机会允许它,然后Windows会编写正确的防火墙规则以允许该连接。那些日子已经一去不回。
3) TLS: Make sure that you are using .NET framework 4.5 or higher. Older versions of .NET Framework would use a version of TLS that has been deprecated due to security issues. Most organizations force the use of TLS 1.2, so you may need to add System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; at the entry point of your application.
4)查看是否可以本地连接:在本地计算机上安装SQL Server Express。查看是否可以连接。如果同样失败,则您的.NET Framework安装很有可能出了点问题。尝试在计算机上运行修复或卸载,然后安装.NET Framework。
 

约翰·塞

活跃的成员
已加入
2019年6月17日
留言内容
27
编程经验
5-10
跳伞运动员

是的,我当前的VBA代码和R代码可以连接。
大约一个半月前,我能够连接到vb.NET,但现在我无法使用我在此处发布的完全相同的代码。
我不知道为什么如何添加排除设置以允许您的应用建立连接。如果是防火墙也不会阻止VBA吗?

因此添加System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;会工作,让我尝试进行维修。
我该如何进行维修?我无法卸载并重新安装。我没有管理员权限。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,504
地点
弗吉尼亚州切萨皮克
编程经验
10+
如果是在防火墙级别,它也应该停止VBA。如果是防病毒软件或保姆软件,则它们通常在应用程序级别运行。您的管理员可能已将可正常使用的应用添加到其白名单中。

如果您没有管理员权限,那么可以,当然,卸载并安装绝对不可以。但是,应该可以进行维修。转到控制面板,在“应用程序”(在Win10中)下找到.NET Framework,或者在较旧的Windows中找到“添加/删除程序”,单击鼠标右键,然后应该选择“修复”。
 
最佳 底部