从C#连接并插入位于服务器上的数据库

时间:2018-01-17 15:56:53

标签: c# sql-server winforms sqlclient

从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

4 个答案:

答案 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脚本
  2. 使用HTTP请求(特别是POST方法)通过C#将数据插入远程服务器
  3. 使用php为远程服务器配置MySQL数据库

步骤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()
        }
    }
}