在 Visual Studio 2008 中连接到 SQL Server 2012 数据库
Connecting to a SQL Server 2012 database in Visual Studio 2008
我目前正在开发基于 Windows CE 的移动应用程序,供我的团队跟踪资产并将其存储在我们现有的数据库中。
我能够成功开发和部署软件,但是我似乎无法从 Visual Studio 2008 连接到我的 SQL Server 2012 数据库。当我尝试从 Visual Studio 2017,它工作得很好。
这只是我的测试代码,不是我真正的资产跟踪器代码,因此它不会包含我为资产跟踪器应用构建的 UI。
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace test_smart_device
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Click += new EventHandler(button_connect);
}
private void button_connect(object sender, EventArgs e)
{
string connetionString = null;
SqlConnection cnn ;
connetionString = "Data Source=172.16.206.20;Initial Catalog=IBusinessTest;Integrated Security=SSPI;User ID=username;Password=123456";
cnn = new SqlConnection(connetionString);
try
{
cnn.Open();
MessageBox.Show ("Connection Open ! ");
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Can not open connection ! ");
}
}
}
}
当我尝试连接到我的数据库时,出现此错误:
这是我在 catch 语句处设置断点时来自调试器的结果
有两件事让我印象深刻:
- 您的连接字符串包括
Integrated Security=SSPI;
,但您还包括 User ID=username;Password=123456
- 是这样吗,您使用的是集成安全性(即使用 Windows 用户登录程序是 运行 作为 - CE 设备和 SQL 服务器上的域或相同的工作组凭据),或者您是否正在尝试使用 SQL 服务器身份验证(通过指定用户 ID 和密码) ?你不能同时使用两者。
- 错误
SQL Server does not exist or access denied
表示您的连接被拒绝,但没有说明原因。如果它不是凭据,那么它可能是连接本身。您是否已检查服务器是否来自设备 remotely accessible?他们在同一个本地网络上吗?如果在 WiFi 上使用物理设备,它是否有权与网络上的其他设备通信(一些 WiFi 路由器,尤其是公司路由器,可以选择只允许流量到网关,并拒绝到本地地址的请求)。
我决定不使用 sqlClient class 直接连接服务器。相反,我将在我的服务器上托管一个 SOAP 服务,该服务将通过 HTTP link.
以 XML 格式接收我的输入
using System.Net;
using System.Xml;
public static void Execute_soap(string l_mat, decimal l_qty, string l_batch)
{
HttpWebRequest request = CreateWebRequest();
request.Credentials = CredentialCache.DefaultCredentials;
XmlDocument soapEnvelopeXml = new XmlDocument();
NewMethod(soapEnvelopeXml, l_mat, l_qty, l_batch);
request.AllowWriteStreamBuffering = true;
using (Stream stream = request.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
using (WebResponse response = request.GetResponse())
{
//Console.WriteLine(((HttpWebResponse)response).StatusDescription);
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
string soapResult = rd.ReadToEnd();
using (StreamWriter writer = new StreamWriter(@"C:\Users\ikhsan\Desktop\xml_file.txt"))
{
writer.WriteLine(soapResult);
}
Console.WriteLine(soapResult);
Console.WriteLine("Done!");
//Console.ReadKey();
}
}
}
private static void NewMethod(XmlDocument soapEnvelopeXml, string mat, decimal qty, string batch)
{
string xml_str = @"<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" +
@"<soap12:Body>" +
@"<PCB_SCAN_EMS xmlns=""http://tempuri.org/"">" +
@"<part_num>" + mat + "</part_num>" +
@"<qty>" + qty.ToString() + "</qty>" +
"<batch>" + batch + "</batch>" +
"<ems_loc>2106</ems_loc>" +
"</PCB_SCAN_EMS>" +
"</soap12:Body>" +
"</soap12:Envelope>";
soapEnvelopeXml.LoadXml(xml_str);
}
public static HttpWebRequest CreateWebRequest()
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://172.16.206.19/PART_INFO/get_part_quantity_from_bin.asmx");
webRequest.ContentType = @"application/soap+xml;charset=UTF-8";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
return webRequest;
}
这将适用于所有 windows 移动版本
我目前正在开发基于 Windows CE 的移动应用程序,供我的团队跟踪资产并将其存储在我们现有的数据库中。
我能够成功开发和部署软件,但是我似乎无法从 Visual Studio 2008 连接到我的 SQL Server 2012 数据库。当我尝试从 Visual Studio 2017,它工作得很好。
这只是我的测试代码,不是我真正的资产跟踪器代码,因此它不会包含我为资产跟踪器应用构建的 UI。
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace test_smart_device
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Click += new EventHandler(button_connect);
}
private void button_connect(object sender, EventArgs e)
{
string connetionString = null;
SqlConnection cnn ;
connetionString = "Data Source=172.16.206.20;Initial Catalog=IBusinessTest;Integrated Security=SSPI;User ID=username;Password=123456";
cnn = new SqlConnection(connetionString);
try
{
cnn.Open();
MessageBox.Show ("Connection Open ! ");
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Can not open connection ! ");
}
}
}
}
当我尝试连接到我的数据库时,出现此错误:
这是我在 catch 语句处设置断点时来自调试器的结果
有两件事让我印象深刻:
- 您的连接字符串包括
Integrated Security=SSPI;
,但您还包括User ID=username;Password=123456
- 是这样吗,您使用的是集成安全性(即使用 Windows 用户登录程序是 运行 作为 - CE 设备和 SQL 服务器上的域或相同的工作组凭据),或者您是否正在尝试使用 SQL 服务器身份验证(通过指定用户 ID 和密码) ?你不能同时使用两者。 - 错误
SQL Server does not exist or access denied
表示您的连接被拒绝,但没有说明原因。如果它不是凭据,那么它可能是连接本身。您是否已检查服务器是否来自设备 remotely accessible?他们在同一个本地网络上吗?如果在 WiFi 上使用物理设备,它是否有权与网络上的其他设备通信(一些 WiFi 路由器,尤其是公司路由器,可以选择只允许流量到网关,并拒绝到本地地址的请求)。
我决定不使用 sqlClient class 直接连接服务器。相反,我将在我的服务器上托管一个 SOAP 服务,该服务将通过 HTTP link.
以 XML 格式接收我的输入using System.Net;
using System.Xml;
public static void Execute_soap(string l_mat, decimal l_qty, string l_batch)
{
HttpWebRequest request = CreateWebRequest();
request.Credentials = CredentialCache.DefaultCredentials;
XmlDocument soapEnvelopeXml = new XmlDocument();
NewMethod(soapEnvelopeXml, l_mat, l_qty, l_batch);
request.AllowWriteStreamBuffering = true;
using (Stream stream = request.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
using (WebResponse response = request.GetResponse())
{
//Console.WriteLine(((HttpWebResponse)response).StatusDescription);
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
string soapResult = rd.ReadToEnd();
using (StreamWriter writer = new StreamWriter(@"C:\Users\ikhsan\Desktop\xml_file.txt"))
{
writer.WriteLine(soapResult);
}
Console.WriteLine(soapResult);
Console.WriteLine("Done!");
//Console.ReadKey();
}
}
}
private static void NewMethod(XmlDocument soapEnvelopeXml, string mat, decimal qty, string batch)
{
string xml_str = @"<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" +
@"<soap12:Body>" +
@"<PCB_SCAN_EMS xmlns=""http://tempuri.org/"">" +
@"<part_num>" + mat + "</part_num>" +
@"<qty>" + qty.ToString() + "</qty>" +
"<batch>" + batch + "</batch>" +
"<ems_loc>2106</ems_loc>" +
"</PCB_SCAN_EMS>" +
"</soap12:Body>" +
"</soap12:Envelope>";
soapEnvelopeXml.LoadXml(xml_str);
}
public static HttpWebRequest CreateWebRequest()
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://172.16.206.19/PART_INFO/get_part_quantity_from_bin.asmx");
webRequest.ContentType = @"application/soap+xml;charset=UTF-8";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
return webRequest;
}
这将适用于所有 windows 移动版本