从php代码插入可以正常使用相同的数据库名称,用户,密码和localhost名称。
我正在尝试连接并将winform桌面应用程序字段中的记录插入到位于远程托管服务器的数据库中,但是这样我得到了异常,并且在我的localhost上插入数据库也有同样的异常,这也适用于php插入。使用php的Servername也可以作为localhost。不确定我做错了什么:
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace INSERT_DATA
{
public partial class Form1 : Form
{
SqlConnection con = new SqlConnection(@"Data Source=localhost;Initial Catalog=myDataBaseName;User ID=myUserName;Password=myPassword");
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into table values('"+ textBox1.Text.Trim() +"','" + textBox2.Text.Trim() + "','" + textBox3.Text.Trim() + "')";
cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
MessageBox.Show("Record inserted successfully!");
}
}
}
类型'System.Data.SqlClient.SqlException'的未处理异常 发生在System.Data.dll
中其他信息:与网络相关或特定于实例的错误 在建立与SQL Server的连接时发生。服务器是 没找到或无法访问。验证实例名称是否为 正确和那个SQL
答案 0 :(得分:0)
从winform桌面应用程序[...]到位于远程托管服务器的数据库
这不是你的连接字符串试图做的事情:
"Data Source=localhost;Initial Catalog=myDataBaseName;User ID=myUserName;Password=myPassword"
您正尝试连接到远程服务器上localhost
,而非上的数据库。您需要找到服务器的连接详细信息。特别是它的主机名(可能只是一个IP地址)。但是,您还需要确保远程数据库访问甚至允许。出于安全原因,通常不允许这样做。
如果确实不允许远程连接(并且您无法更改),那么通常的方法是将Web应用程序写入远程服务器上的主机,该应用程序公开应用程序可以使用的API。 (如果您仍处于C#世界,WebAPI项目可以很好地完成工作。)然后您的客户端应用程序将与该API(通常是HTTP REST API)集成,而不是与数据库本身集成。
答案 1 :(得分:0)
根据https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection(v=vs.110).aspx
你已经得到了所有的东西。请注意,连接字符串中的“用户ID”应为“UserId”。试试看,然后仔细检查你所有的拼写。在msdn文档和你通过php设置工作的事实之间,它可能就像拼写错误一样简单。其他人确实对您的实现的某些设计有一点意见,但让它工作,然后重构一些不良做法。
一旦工作,我强烈建议至少转移到这个模板:
`using (SqlConnection connection = new SqlConnection(
connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}`
然后在构建查询之前开始尝试验证输入,然后参数化查询。
答案 2 :(得分:0)
别担心,实现这些步骤很简单即可实现目标
步骤1 这是PHP脚本,编写此php并将其放在您的远程服务器中
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
include 'DatabaseConfig.php';
$con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);
$pick_id = $_POST['pick_id'];
$latitude = $_POST['latitude']; //change them what ever you want
$longitude = $_POST['longitude'];
$CheckSQL = "SELECT * FROM pickups WHERE phone_num='$u_ph_number'";
//this is validation to avoid duplicating data
$check = mysqli_fetch_array(mysqli_query($con,$CheckSQL));
if(isset($check))
{
echo 'This data is unable to insert';
}
else{
$Sql_Query = "INSERT INTO pickups (pick_id,latitude,longitude) values
('$pick_id','$latitude','$longitude')";
if(mysqli_query($con,$Sql_Query))
{
echo 'Succesfully';
}
else
{
echo 'Something went wrong';
}
}
}
mysqli_close($con);
?>
第2步 C#部分用于在远程服务器中插入数据,该数据是为远程服务器中的MySQL数据库插入的
using (var wb = new WebClient())
{
var data = new NameValueCollection();
data["latitude"] = CN.dr[1].ToString();
data["longitude"] = CN.dr[2].ToString();
data["garbage"] = CN.dr[3].ToString();
data["district"] = CN.dr[4].ToString();
data["ph_number"] = CN.dr[0].ToString();
var response = wb.UploadValues("https://urbanwaste.000webhostapp.com/user/pickup.php", "POST", data);
string responseInString = Encoding.UTF8.GetString(response);
}
3。 MySQL配置将此文件放在远程服务器中,我正在使用000webhost进行测试
<?php
//Define your host here.
$HostName = "localhost";
//Define your database username here.
$HostUser = "DBusername";
//Define your database password here.
$HostPass = "DBpassword";
//Define your database name here.
$DatabaseName = "DBname";
?>
这是我可以通过C#在远程服务器中插入数据的方式
答案 3 :(得分:-1)
为什么你不尝试做正确的事情&#34;? 从代码中删除连接字符串并输入 App.config
修改谢谢Archer
<connectionStrings>
<add name="*ProjectName*.Properties.Settings.*ConnectionString*"
connectionString="Data Source=*server*;Initial Catalog=*database*;User ID=*user*;Password=*pwd*"
providerName="System.Data.SqlClient" />
</connectionStrings>
你可以这样调用你的代码:
public class Class{
static string str = Properties.Settings.Default.ConnectionString;
SqlConnection con = new SqlConnection(str);
public void method(){
try{
con.Open();
SqlCommand cmd = new SqlCommand("StoredProcedure", con);
cmd.CommandType = CommandType.StoredProcedure;
}catch{
/**/
}finally{
con.Close()
}
}
}