Установите соединение с SQL Server с помощью приложения Windows Form 2015 для Visual Studio 2015 - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь создать приложение формы окна, подключенное к базе данных SQL Server. Я могу подключиться к базе данных, используя Alteryx, Tableau, Python и используя мастер подключения в Visual Studio. Однако, когда я пытаюсь создать соединение в приложении, оно не может соединиться. Я пытался сделать это несколькими способами

  1. VB
  2. C # с использованием SqlClient
  3. C # с использованием файла конфигурации (с подробностями из проверенного соединения)
  4. C # с использованием драйвера ODBC
/*************** ODBC Driver ***************/

using System;
using System.Windows.Forms;
using System.Data.Odbc;

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

        private void button1_Click(object sender, EventArgs e)
        {

            string connetionString = null;
            OdbcConnection cnn;

            connetionString = "Driver={SQL Server Native Client 11.0};
            Server=********;Database=********;Uid=********;Pwd=********;"; 

            cnn = new OdbcConnection(connetionString);

            try
            {

                cnn.Open();
                MessageBox.Show("Connection Open ! ");
                cnn.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("Can not open connection ! ");
            }

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

Однако, когда я запускаю этот код, я получаю следующую ошибку

Активированное время Продолжительность Длительность Исключение потока: Исключение выдано: 'Система.Data.Odbc.OdbcException 'в System.Data.dll ("ОШИБКА [08001] [Microsoft] [Собственный клиент SQL Server 11.0] Поставщик TCP: при поиске в базе данных возникла неустранимая ошибка.

ОШИБКА[HYT00] [Microsoft] [Собственный клиент SQL Server 11.0] Истекло время ожидания входа ОШИБКА [08001] [Microsoft] [Собственный клиент SQL Server 11.0] Произошла ошибка, связанная с сетью или экземпляром, при установлении соединения с SQL Server. не найден или недоступен. Проверьте, правильно ли указано имя экземпляра и настроен ли SQL Server для разрешения удаленных подключений. Дополнительные сведения см. в электронной документации по SQL Server. "). Возникло исключение: «System.Data.Odbc.OdbcException» в System.Data.dll («ОШИБКА [08001] [Microsoft] [Собственный клиент SQL Server 11.0] Поставщик TCP: при поиске в базе данных возникла неустранимая ошибка.

ОШИБКА [HYT00] [Microsoft] [Собственный клиент SQL Server 11.0] Истекло время ожидания входа ОШИБКА [08001] [Microsoft] [Собственный клиент SQL Server 11.0] При установлении соединения произошла ошибка сети или экземпляра. к SQL Server. Сервер не найден или недоступен. Проверьте правильность имени экземпляра и настроен ли SQL Server для разрешения удаленных подключений. Для получения дополнительной информации см. Электронную документацию по SQL Server. ") 16.78s [22724]

Для сравнения, когда я запускаю аналогичный скрипт в Python, у меня нет проблем с подключением к данным

/******** Python using Jupiter Notebook ********/

import pyodbc 
conn = pyodbc.connect('Driver={SQL Server Native Client 11.0};'
                      'Server=********;'
                      'Database=********;'
                      'Uid=********;'
                      'Pwd=********;')

cursor = conn.cursor()
cursor.execute('SELECT * FROM [********].[dbo].[********]')

for row in cursor:
    print(row)

Почему я не могу подключиться через приложение Windows Form, если я могу подключить все остальныепути. Я предполагаю, что у меня все настройки TCP / IP должны быть в порядке? Плюс я уже установил соединение через Visual Studio.

1 Ответ

0 голосов
/ 29 октября 2019

Я изменил ODBCConnection на SQLConnection. Это сработало для меня, но я ни в коем случае не эксперт. Я лучше работаю в VB.NET, поэтому этот код был преобразован в C # с помощью Telerik Code Converter . Я также разместил код VB.NET внизу на случай, если что-то испортилось при конвертации.

Код C #

using System;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            TestConnection();
        }

        private void TestConnection()
        {
            string connectionString = null;
            SqlConnection cnn;
            SqlConnectionStringBuilder cnBuild = new SqlConnectionStringBuilder();
            cnBuild.DataSource = "Server";
            cnBuild.InitialCatalog = "databaseName";
            cnBuild.UserID = "userid";
            cnBuild.Password = "password";
            // connectionString = "Driver={SQL Server Native Client 11.0};Server=********;Database=********;Uid=********;Pwd=********;"
            cnn = new SqlConnection(cnBuild.ConnectionString);

            try
            {
                cnn.Open();
                MessageBox.Show("Connection Open ! ");
                cnn.Close();
            }
            catch (Exception __unusedException1__)
            {
                MessageBox.Show("Can not open connection ! ");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }
}

VB.NetКод


Imports System
Imports System.Windows.Forms
Imports System.Data.SqlClient

Namespace WindowsFormsApplication2
    Partial Public Class Form1
        Inherits Form

        Public Sub New()


            TestConnection()
        End Sub

        Private Sub TestConnection()

            Dim connectionString As String = Nothing
            Dim cnn As SqlConnection
            Dim cnBuild As New SqlConnectionStringBuilder
            cnBuild.DataSource = "Server"
            cnBuild.InitialCatalog = "databaseName"
            cnBuild.UserID = "userid"
            cnBuild.Password = "password"
            cnn = New SqlConnection(cnBuild.ConnectionString)

            Try
                cnn.Open()
                MessageBox.Show("Connection Open ! ")
                cnn.Close()
            Catch __unusedException1__ As Exception
                MessageBox.Show("Can not open connection ! ")
            End Try
        End Sub

        Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
        End Sub

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
        End Sub
    End Class
End Namespace
...