ASP.NET實現二維碼 ASP.Net上傳文件 SQL基礎語法 C# 動態建立數據庫三(MySQL) Net Core 實現谷歌翻譯ApI 免費版 C#發佈和調試WebService ajax調用W

ASP.NET實現二維碼

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ThoughtWorks.QRCode.Codec;javascript

namespace WeChat
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{html

}前端

protected void btnCRC_Click(object sender, EventArgs e)
{
//建立時間
DateTime currentTime = new System.DateTime();
//取當前年月日時分秒
currentTime = System.DateTime.Now;
//取當前年
int Year = currentTime.Year;
//取當前月
int Month = currentTime.Month;
//取當前日
int Day = currentTime.Day;
if (Day < 10)
{
Day = 0 + Day;
}
//取當前時
int Hour = currentTime.Hour;
//取當前分
int Minute = currentTime.Minute;
int Minute1 = currentTime.Minute + 10;
//取當前秒
int Second = currentTime.Second;
//取當前毫秒
int Millisecond = currentTime.Millisecond;
this.txtCRC.Text = Second.ToString();
ThoughtWorksQRCode("您好歡迎使用二維碼查看!");
}
private void ThoughtWorksQRCode(string strtxt)
{
try
{
Bitmap bt;
string enCodeString = strtxt;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
string filename = DateTime.Now.ToString("yyyymmddhhmmss");
filename = filename.Replace(" ", "");
filename = filename.Replace(":", "");
filename = filename.Replace("-", "");
filename = filename.Replace(".", "");
bt.Save(Server.MapPath("~/images/") + filename + ".jpg");
this.Image1.ImageUrl = "~/images/" + filename + ".jpg";
}
catch (Exception e)
{
throw e;
}vue

}java

//public void GenerateQRCode(string content)
//{
// try
// {
// // _fileLog.Info("GenerateQRCode|開始生成二維碼");
// if (null != content)
// {
// //初始化二維碼生成工具
// var qrCodeEncoder = new QRCodeEncoder
// {
// QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE,
// QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M,
// QRCodeVersion = 0,
// QRCodeScale = 4
// };
// //將字符串生成二維碼圖片
// var image = qrCodeEncoder.Encode(content);
// var ms = new MemoryStream();
// image.Save(ms, ImageFormat.Png);
// Response.BinaryWrite(ms.GetBuffer());
// Response.End();
// }
// //_fileLog.Info("CloudCardController|GenerateQRCode|成功生成二維碼");
// }
// catch (Exception ex)
// {
// //_fileLog.Error("GenerateQRCode|生成二維碼出現異常,異常信息:" + ex.Message);
// }mysql

//}
//private void CreateCode_Simple(string nr)
//{
// QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
// qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
// qrCodeEncoder.QRCodeScale = 4;
// qrCodeEncoder.QRCodeVersion = 8;
// qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
// //System.Drawing.Image image = qrCodeEncoder.Encode("4408810820 深圳-廣州 小江");
// System.Drawing.Image image = qrCodeEncoder.Encode(nr);
// string filename = DateTime.Now.ToString("yyyymmddhhmmssfff").ToString() + ".jpg";
// string filepath = Server.MapPath(@"~\Upload") + "\\" + filename;
// System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
// image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);jquery

// fs.Close();
// image.Dispose();
// //二維碼解碼
// var codeDecoder = CodeDecoder(filepath);
//}git

///// <summary>
///// 二維碼解碼
///// </summary>
///// <param name="filePath">圖片路徑</param>
///// <returns></returns>
//public string CodeDecoder(string filePath)
//{
// if (!System.IO.File.Exists(filePath))
// return null;
// Bitmap myBitmap = new Bitmap(Image.FromFile(filePath));
// QRCodeDecoder decoder = new QRCodeDecoder();
// string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap));
// return decodedString;
//}
}
}es6

 

 

ASP.Net上傳文件

在作Web項目時,上傳文件是常常會碰到的需求。ASP.Net的WebForm開發模式中,封裝了FileUpload控件,能夠方便的進行文件上傳操做。但有時,你可能不但願使用ASP.Net中的服務器控件,僅僅使用Input標籤來實現文件上傳。固然也是能夠的。下面總結在項目中使用過的上傳文件的方式。web

1、使用Asp.Net中的FileUpload服務器端控件實現上傳

使用asp.net中的服務器端控件FileUpload上傳文件很是方便。FileUpload對上傳操做進行了封裝,你只須要調用SaveAs方法便可完成上傳。下面是簡單的上傳代碼。

    <p>服務器端控件上傳</p>
    <asp:FileUpload ID="MyFileUpload" runat="server" /> 
        <asp:Button ID="FileUploadButton" runat="server" Text="上傳" 
            onclick="FileUploadButton_Click" />
複製代碼
複製代碼
 1    protected void FileUploadButton_Click(object sender, EventArgs e)
 2         {
 3             if (MyFileUpload.HasFile)
 4             {
 5                 string filePath = Server.MapPath("~/UploadFiles/");
 6                 string fileName = MyFileUpload.PostedFile.FileName;
 7                 MyFileUpload.SaveAs(filePath + fileName);
 8                 Response.Write("<p >上傳成功!</p>");
 9             }
10             else
11             {
12                 Response.Write("<p >請選擇要上傳的文件!</p>");
13             }
14         }
複製代碼
複製代碼

固然,在實際項目中就不能這麼簡單的保存文件了。你至少得增長一些文件類型的判斷,防止用戶上傳一些可以威脅到系統安全的文件。你能夠採用客戶端JS驗證的方式,也可以在.cs的服務器端代碼中驗證。

在asp.Net WebForm開發框架下,咱們也能夠利用Html的Input標籤來上傳文件。這時候須要注意的一點,這個type爲file的Input標籤須要加上runat="server"屬性,不然在後臺Request.Files獲取不到上傳的文件。

  <p>使用Html的Input標籤上傳</p>
    <input type="file" name="MyFileUploadInput" runat="server" /><asp:Button 
            ID="InputFileUploadButton" runat="server" Text="上傳" 
            onclick="InputFileUploadButton_Click" />
複製代碼
複製代碼
 1         protected void InputFileUploadButton_Click(object sender, EventArgs e)
 2         {
 3             HttpFileCollection files = Request.Files;
 4             string filePath = Server.MapPath("~/UploadFiles/");
 5             if (files.Count != 0)
 6             {
 7                 string fileName = files[0].FileName;
 8                 files[0].SaveAs(Path.Combine(filePath, fileName));
 9                 Response.Write("<p>上傳成功</p>");
10             }
11             else
12             {
13                 Response.Write("<p>未獲取到Files:"+ files.Count.ToString()+"</p>");
14             }
15         }
複製代碼
複製代碼

以這種方式進行上傳的時候,好處就是能夠方便的用JS生成多個Input標籤來上傳多個文件。且此時須要注意的是,Input標籤必需要有name屬性。在後臺,只須要循環調用SaveAs()方法便可。

接下來的兩種上傳方式(二和三)都會用到Ajax異步提交數據,後臺使用一個.ashx文件進行處理。兩種方式共用一個文件,ajax傳入的url參數中加一個method來區分哪一種方式傳過來的。後臺代碼以下:

複製代碼
複製代碼
 1    public void ProcessRequest(HttpContext context)
 2         {
 3             string method = context.Request.QueryString["method"].ToString();
 4             switch (method)
 5             {
 6                 case "ajaxFileUpload":
 7                     ajaxFileUpload(context);
 8                     break;
 9                 case "formDataUpload":
10                     formDataUpload(context);
11                     break;
12                 default:
13                     break;
14             }
15         }
16 
17         private static void formDataUpload(HttpContext context)
18         {
19             HttpFileCollection files = context.Request.Files;
20 
21             string msg = string.Empty;
22             string error = string.Empty;
23             if (files.Count > 0)
24             {
25                 files[0].SaveAs(ConfigurationManager.AppSettings["FilePath"].ToString() + System.IO.Path.GetFileName(files[0].FileName));
26                 msg = " 成功! 文件大小爲:" + files[0].ContentLength;
27                 string res = "{ error:'" + error + "', msg:'" + msg + "'}";
28                 context.Response.Write(res);
29                 context.Response.End();
30             }
31         }
32 
33         private static void ajaxFileUpload(HttpContext context)
34         {
35             HttpFileCollection files = context.Request.Files;
36 
37             string msg = string.Empty;
38             string error = string.Empty;
39             if (files.Count > 0)
40             {
41                 files[0].SaveAs(ConfigurationManager.AppSettings["FilePath"].ToString() + System.IO.Path.GetFileName(files[0].FileName));
42                 msg = " 成功! 文件大小爲:" + files[0].ContentLength;
43                 string res = "{ error:'" + error + "', msg:'" + msg + "'}";
44                 context.Response.Write(res);
45                 context.Response.End();
46             }
47         }
複製代碼
複製代碼

 

2、使用Html中的Input標籤加FormData對象實現

使用這種方式上傳附件,對瀏覽器有些要求。FormData屬於Html5中新增的特性,IE瀏覽器只有在10以上才支持。因此,箇中利弊本身權衡,但用起來以爲方便。下面直接上代碼:

複製代碼
複製代碼
 1   function formDataUpload() {
 2             var fileupload = document.getElementById('fileToUpload').files;
 3             var formdata = new FormData();
 4             formdata.append('files', fileupload[0]);
 5             var xmlHttp = new XMLHttpRequest();
 6             xmlHttp.open("post", 'Handlers/FileUpload.ashx?method=formDataUpload');
 7             xmlHttp.onreadystatechange = function () {
 8                 if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
 9                     alert('上傳成功');
10                 }
11             }
12             xmlHttp.send(formdata);
13         }
複製代碼
複製代碼

 

3、使用Jquery中的ajaxfileupload.js插件實現上傳

使用此方法,須要引用jquery.js和ajaxfileupload.js兩個文件。還須要注意的部分是兩個文件的版本匹配問題,可能在使用過程當中會出現些異常。此時發揮搜索引擎的做用,總能找到你須要的解決方案。

JavaScript代碼以下:

複製代碼
複製代碼
 1     function ajaxFileUpLoad() {
 2         $.ajaxFileUpload(
 3             {
 4                 url: 'Handlers/FileUpload.ashx?method=ajaxFileUpload',
 5                 secureuri: false,
 6                 fileElementId: 'fileToUpload',
 7                 dataType: 'json',
 8                 success: function (data, status) {
 9                     $('#img1').attr("src", data.imgurl);
10                     if (typeof (data.error) != 'undefined') {
11                         if (data.error != '') {
12                             alert(data.error);
13                         } else {
14                             alert(data.msg);
15                         }
16                     }
17                 },
18                 error: function (data, status, e) {
19                     alert(e);
20                 }
21             }
22         )
23         return false;
24     }
複製代碼
複製代碼

Html頁面上的代碼以下:

複製代碼
複製代碼
 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3 <script type="text/javascript" src="Scripts/jquery-1.4.1.js"></script>
 4 <script type="text/javascript" src="Scripts/ajaxfileupload.js"></script>
 5 <script type="text/javascript">
 6     $(function () {
 7         $("#ajaxfileuploadButton").click(function () {
 8             ajaxFileUpLoad();
 9         })
10 
11         $("#formdataButton").click(function () {
12             formDataUpload();
13         })
14     });
15 
16 </script>
17     <title></title>
18     <script type="text/javascript">
19      
20     </script>
21 </head>
22 <body>
23 <input type="file" id="fileToUpload" name="fileToUpload" />
24 <input type="button" id="ajaxfileuploadButton" value="ajaxfileupload插件上傳" />
25 <input type="button" id="formdataButton" value="FormData方式上傳" />
26 </body>
27 </html>
複製代碼
 
 
 
 

SQL基礎語法

數據庫:

結構化查詢語言(Structured Query Language)簡稱SQL;

數據庫管理系統(Database Management System)簡稱DBMS;

數據庫管理員(Database Administration)簡稱DBA,功能是確保DBMS的正常高效運行;

數據庫分體驗版(通常只安裝庫文件和服務)和正式版(受權使用);

在正式團隊開發時,通常只安裝界面,登陸到服務器共同操做數據庫,這樣可避免每人的數據庫不一樣而沒法組合。

SQL server 2008 模式:

1.客戶機/服務器(C/S)

2.瀏覽器/服務器(B/S)

 

數據庫文件:

***一個數據庫最多能夠存32767個數據文件和32767個日誌文件

名稱 用途 擴展名
主文件 存儲數據、啓動信息 必須有且只能有一個
mdf

次要文件 存儲主文件未存儲的數 無關緊要、可多可少
ndf

日誌文件 記錄操做信息 必須有且至少有一個
ldf

ps:一個文件或文件組只能用於一個數據庫,不能用於多個數據庫。

一個文件只能是某一個文件組的成員,不能是多個文件組的成員。

日誌文件永遠不能是任意文件組的成員。

數據信息和日誌信息不能放在同一個文件或文件組中。

 

數據庫系統服務器類型:

1.數據庫引擎:核心服務,是一個複雜的系統,負責數據的存儲,處理和安全;

2.Analysis services:分析挖掘數據,支持本地多維數據集引擎,可以使斷開鏈接的客戶端上的應用程序可以在本地瀏覽器以存儲的多維數據;

3.Reporting services:報表服務器管理工具;

4.Intergration services:負責數據的提取,轉換和加載等操做,能夠高效處理各類各樣的數據源。例:Oracle、Excel、XML文檔等;

5.SQL server compact edition:不是SQL server 2008的組成部分,它是一種功能強大的輕型關係數據庫引擎。

 

數據庫產品:

甲骨文 Oracle

IBM DB二、Informix

賽貝斯 Sybase Ase

微軟 Access、Microsoft SQL sever

My SQL 開源DB

PS:Microsoft SQL sever 2008 代碼名稱爲:katmai

數據庫中系統數據庫中包含Master、Tempdb、Model和Msdb類型。

 

SQL sever 2008 的數據存儲單位:

1.頁:最基本的單位。

8KB爲一頁,128頁爲1MB,開頭是96B的標頭,

表中每一行數據字節數不能超過8192-96B(8192=1024*8)

2.區:管理空間的基本單位。

8個連接頁爲一個區,即64KB爲一個區,16個區爲1MB,

控制表和索引的存儲<64KB時存在混合盤,只有在64KB是才整存。

 

控制數據庫的服務:

運行cmd

輸入net start MSSQLserver 啓動數據庫服務

輸入net stop MSSQLserver 關閉數據庫服務

輸入net pause MSSQLserver 暫停數據庫服務

輸入net continue MSSQLserver 繼續數據庫服務

 


經常使用語句
序號 code int
名字 name varchar(50)not null
日期 birth varchar(50) null
性別 sex char(10)not null
分數 score decimal(18,2)
價格 price deciman(18,2) 
產地 addr varchar(50)

insert into 添加
select 查詢
insert into 插入
update 更改
delete 刪除

 

練習:

 

 

 

排列順序:

一、C#的作法

 

二、SQL server 作法

 
 
 

前面有說明使用EF動態新建數據庫與表,數據庫使用的是SQL SERVER2008的,在使用MYSQL的時候仍是有所不一樣

1、添加 EntityFramework.dll ,System.Data.Entity.dll ,MySql.Data, MySql.Data.Entity.EF6

注意:Entity Framework5.0.0(好像最新的6.X是不支持mysql的)

2、添加dll文件,可使用「管理NuGet程序包」或者「Nuget程序包管理控制檯」添加

 

與 控制檯平臺添加

 

如下爲控制檯平臺安裝dll語句
 EntityFramework.dll : Install-Package EntityFramework -Version 5.0.0
MySql.Data : Install-Package MySql.Data -Version 6.9.12
MySql.Data.Entity:Install-Package MySql.Data.Entity -Version 6.9.12

3、在app.config文件中添加connectionStrings

 

 源文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version= "1.0"  encoding= "utf-8" ?>
<configuration>
   <configSections>
     <section name= "entityFramework"  type= "System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"  requirePermission= "false"  />
     <!-- For more information  on  Entity Framework configuration, visit http: //go.microsoft.com/fwlink/?LinkID=237468 -->
   </configSections>
   <entityFramework>
     <defaultConnectionFactory type= "System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"  />
     <providers>
       <provider invariantName= "System.Data.SqlClient"  type= "System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"  />
       <provider invariantName= "MySql.Data.MySqlClient"  type= "MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" ></provider>
     </providers>
   </entityFramework>
   <system.data>
     <DbProviderFactories>
       <remove invariant= "MySql.Data.MySqlClient"  />
       <add name= "MySQL Data Provider"  invariant= "MySql.Data.MySqlClient"  description= ".Net Framework Data Provider for MySQL"  type= "MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"  />
     </DbProviderFactories>
   </system.data>
   <connectionStrings>
     <!--<add name= "conncodefirst"  connectionString= "server=127.0.0.1;port=3306;uid=root;pwd=repower;database=code"  providerName= "MySql.Data.MySqlClient" />-->
     <add name= "conncodefirst"  connectionString= "server=127.0.0.1;user id=root;password=repower;database=code"  providerName= "MySql.Data.MySqlClient"  />
   </connectionStrings>
</configuration>

4、添加類

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[Table( "Student" )]
     public  class  Student
     {
         public  Student()
         {
 
         }
         [Key]
         public  int  StudentID {  get set ; }
         public  string  StudentName {  get set ; }
         public  DateTime AddTime {  get set ; }
 
     }
 
     [Table( "Standard" )]
     public  class  Standard
     {
         public  Standard()
         {
 
         }
         public  int  StandardId {  get set ; }
         public  string  StandardName {  get set ; }
         public  DateTime AddTime {  get set ; }
 
     }

  

添加SchoolContext 繼承DbContext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[DbConfigurationType( typeof (MySql.Data.Entity.MySqlEFConfiguration))]
     public  class  SchoolContext : DbContext
     {
         public  SchoolContext()
             base ( "name=conncodefirst" )
         {
 
         }
 
         static  SchoolContext()
         {
             DbConfiguration.SetConfiguration( new  MySql.Data.Entity.MySqlEFConfiguration());
         }
 
         public  DbSet<Student> Students {  get set ; }
         public  DbSet<Standard> Standards {  get set ; }
 
         //protected override void OnModelCreating(DbModelBuilder modelBuilder)
         //{
         //    base.OnModelCreating(modelBuilder);
         //}
     }

  

最後調用

1
2
3
4
5
6
SchoolContext dbCOntext =  new  SchoolContext();
                 //dbCOntext.Database.
                 bool  flag = dbCOntext.Database.CreateIfNotExists();
                 Student stud =  new  Student() { StudentName =  "New Student" , AddTime = DateTime.Now };
                 dbCOntext.Students.Add(stud);
                 dbCOntext.SaveChanges();

  結果

 

 

 

 

 

 

 

Net Core 實現谷歌翻譯ApI 免費版

 

  因爲谷歌翻譯官方API是付費版本,本着免費和開源的精神。分享一下用 Net Core 實現谷歌翻譯API的代碼。

 

項目引用的Nuget 包:

ChakraCore.NET

Newtonsoft.Json

JavaScriptEngineSwitcher.ChakraCore.Native.win-x86(特別說明一下"win-x86",表明程序運行環境。)

翻譯地址https://translate.google.cn (國內能夠訪問)

參數說明: 

text:待翻譯文本

sl:須要翻譯的語言(中文:zh-CN,英文:en)

tl: 翻譯結果的語言(中文:zh-CN,英文:en)

 

 

 

複製代碼
 1 public class HttpHelper
 2     {
 3         /// <summary>
 4         /// 請求
 5         /// </summary>
 6         /// <param name="url">地址</param>
 7         /// <param name="args">參數</param>
 8         /// <returns></returns>
 9         public static string GetRequest(string url, CookieContainer cookieContainer, Dictionary<string, dynamic> args)
10         {
11             try
12             {
13                 if (args.Count > 0)
14                 {
15                     var argStr = string.Empty;
16 
17                     foreach (var item in args)
18                     {
19                         if (item.Key == null || item.Value == null)
20                         {
21                             continue;
22                         }
23                         argStr = $"{argStr}{item.Key}={item.Value}&";
24                     }
25 
26                     url = $"{url}?{argStr.TrimEnd('&')}";
27                 }
28 
29                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
30                 request.Method = "get";
31                 request.Timeout = 100000;
32                 request.CookieContainer = cookieContainer;
33                 request.UserAgent = GetUserAgent();
34                 request.Headers.Add("X-Requested-With:XMLHttpRequest");
35                 request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
36                 using (var webResponse = (HttpWebResponse)request.GetResponse())
37                 {
38                     using (var reader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
39                     {
40 
41                         return reader.ReadToEnd();
42                     }
43                 }
44             }
45             catch (Exception)
46             {
47                 return string.Empty;
48             }
49         }
50         
51         /// <summary>
52         /// 用戶代理
53         /// </summary>
54         /// <returns></returns>
55         private static string GetUserAgent()
56         {
57             var userAgents = new List<string>
58             {
59                 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
60                 "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
61                 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
62                 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
63                 "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
64                 "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
65                 "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
66                 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
67                 "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
68                 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
69                 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
70                 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
71                 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
72                 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
73                 "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
74                 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
75                 "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
76                 "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
77                 "Mozilla/5.0 (Macintosh; U; Mac OS X Mach-O; en-US; rv:2.0a) Gecko/20040614 Firefox/3.0.0 ",
78                 "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3",
79                 "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5",
80                 "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.14) Gecko/20110218 AlexaToolbar/alxf-2.0 Firefox/3.6.14",
81                 "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15",
82                 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
83                 "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
84                 "Opera/9.80 (Android 2.3.4; Linux; Opera mobi/adr-1107051709; U; zh-cn) Presto/2.8.149 Version/11.10",
85                 "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
86                 "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8",
87                 "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
88                 "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0",
89                 "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
90                 "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
91                 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
92             };
93 
94             return userAgents.OrderBy(x => Guid.NewGuid()).First();
95         }
96     }
複製代碼

 

複製代碼
  1 /// <summary>
  2     /// 翻譯 助手
  3     /// </summary>
  4     public static class TranslationHelper
  5     {
  6         /// <summary>
  7         /// Chakra 上下文
  8         /// </summary>
  9         private static readonly ChakraContext _chakraContext;
 10 
 11         /// <summary>
 12         /// Cookie
 13         /// </summary>
 14         private static readonly CookieContainer _cookieContainer;
 15 
 16         /// <summary>
 17         /// 請求地址
 18         /// </summary>
 19         private static readonly string _baseUrl;
 20 
 21         /// <summary>
 22         /// 靜態
 23         /// </summary>
 24         static TranslationHelper()
 25         {
 26             var runtime = ChakraRuntime.Create();
 27 
 28             _baseUrl = "http://translate.google.cn/translate_a/single";
 29             _cookieContainer = new CookieContainer();
 30             _chakraContext = runtime.CreateContext(true);
 31 
 32             var basePath = PlatformServices.Default.Application.ApplicationBasePath;
 33             var jsFileText = File.ReadAllText($@"{basePath}\gettk.js");
 34 
 35             _chakraContext.RunScript(jsFileText); //運行腳本
 36         }
 37 
 38         /// <summary>
 39         /// 獲取翻譯結果(須要翻譯的文字默認使用中文)
 40         /// </summary>
 41         /// <param name="toLang">語言</param>
 42         /// <param name="originalText">待翻譯的文本</param>
 43         /// <returns></returns>
 44         public static string GetTranslation(this string toLang, string originalText)
 45         {
 46             if (string.IsNullOrEmpty(toLang))
 47             {
 48                 return toLang;
 49             }
 50             if (string.IsNullOrEmpty(originalText))
 51             {
 52                 return originalText;
 53             }
 54 
 55             return GetTranslation("zh-cn", toLang, originalText);
 56 
 57         }
 58 
 59         /// <summary>
 60         /// 獲取翻譯結果
 61         /// </summary>
 62         /// <param name="fromLang">須要翻譯的語言</param>
 63         /// <param name="toLang">翻譯結果的語言</param>
 64         /// <param name="originalText">待翻譯文本</param>
 65         /// <returns></returns>
 66         public static string GetTranslation(this string fromLang, string toLang, string originalText)
 67         {
 68             var args = new Dictionary<string, dynamic>
 69             {
 70                 { "client", "t" },
 71                 { "sl", fromLang },
 72                 { "tl", toLang },
 73                 { "dt", "t" },
 74                 { "tk", GetTK(originalText) },
 75                 { "text", HttpUtility.UrlEncode(originalText) }
 76             };
 77 
 78             var result = HttpHelper.GetRequest(_baseUrl, _cookieContainer, args);
 79 
 80             return result.FormattedJson();
 81         }
 82 
 83         /// <summary>
 84         /// 獲取TK
 85         /// </summary>
 86         /// <param name="originalText"></param>
 87         /// <returns></returns>
 88         private static string GetTK(string originalText)
 89         {
 90             _chakraContext.GlobalObject.WriteProperty("originalText", originalText);
 91             return _chakraContext.RunScript("getTK(originalText)");
 92         }
 93 
 94         /// <summary>
 95         /// 格式化Json
 96         /// </summary>
 97         /// <param name="jsonStr">Json</param>
 98         /// <returns></returns>
 99         private static string FormattedJson(this string jsonStr)
100         {
101             if (string.IsNullOrEmpty(jsonStr))
102             {
103                 return string.Empty;
104             }
105 
106             var array = JsonConvert.DeserializeObject<JArray>(jsonStr);
107 
108             var result = array[0][0][0].ToString();
109 
110             return result;
111         }
112 
113     }
複製代碼

 

 

 

 

 

C#發佈和調試WebService

 
一.編寫併發布WebService服務
1.新建空web應用程序
 
2.右鍵項目解決方案-添加-新建項-選擇web服務
添加完成以下:
3.能夠看到實例代碼裏有這一行註釋,請取消註釋,由於咱們要使用ajax來調用webservice
// [System.Web.Script.Services.ScriptService]

4.實例代碼包含一個HelloWorld的方法,僅僅返回一個 Hello Word 。

在下面再寫一個帶參數的方法:

[WebMethod]
        public int add(int a , int b)
        {
            return a + b;
        }

 

5.右鍵項目解決方案-發佈-發佈方法(選擇文件系統)-目標位置(存放webservice代碼的路徑,隨便一個都行但你要記住,後面要用)-發佈

發佈是否成功能夠看vs下的輸出欄

 

6.打開iis(Internet Information Services (IIS)管理器)

右鍵網站-添加網站-

 

物理路徑就是發佈webService時選擇的路徑

選擇一個未佔用的端口號

肯定。

7.雙擊網站下新建的webServiceDemo

雙擊目錄瀏覽,啓用目錄瀏覽(不作這步會出錯的)

而後點擊右側-瀏覽網站

 

點擊文件名

8.而後就能夠測試咱們寫的webService方法了

 

 9.關於啓用目錄瀏覽,能夠省去這一步,在操做中也免去了點擊目錄文件這一步驟。

不用啓用目錄瀏覽,而添加默認文檔:

添加的默認文檔就是打開網站顯示的首頁。

咱們將其設置爲WebService1.asmx,這樣進入網站首頁顯示的就是咱們寫的方法。

 

 

 

 

 

ajax調用WebService實現數據庫操做

 

 首先說下測試環境和思路:

前端收集數據轉換成json格式傳輸到後端,處理並存入數據庫

1.數據庫操做:

複製代碼
[WebMethod]
        public string InsertPoint(string data)
        {
            //解決跨域問題
            //Context.Response.AddHeader("Access-Control-Allow-Origin", "*");
            string database = "Data Source=.;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=password1633";
            //string data = HttpContext.Current.Request["data"];
            try
            {

                if (data.Equals("") || data == null)
                {
                    return "data is null";
                }
                else
                {
                    OverlaysPoint opoint = JsonConvert.DeserializeObject<OverlaysPoint>(data);// 將接收的參數data實例化爲一個對象(方便操做),注意該類的變量名要和json的key值對應
                    /*foreach (Data_Opoint dtpoint in opoint.overlays)
                    {
                        sql = "insert into Map_Overlays(wf_pictureid,wf_picturename,wf_railid,wf_name,wf_location,wf_createtime,wf_pid,wf_lng,wf_lat) values('" + "123456789" + "','" + opoint.picturename + "','" + opoint.id + "','" + opoint.name + "','" + opoint.location + "','" + opoint.createime + "','" + dtpoint.pid + "','" + dtpoint.lng.ToString() + "','" + dtpoint.lat.ToString() + "')";
                        ExecuteUpdate(sql, database);

                    }*/
                    string[] xyArray = opoint.position.Split(new string[] { "(", ",", ")" }, StringSplitOptions.RemoveEmptyEntries); //處理json字符串
//執行sql語句 string sql = "insert into map_img_points(miid,pointtype,pointid, pointcode, positionx, positiony, pointinfo) values ('地圖id', '" + opoint.point_type + "', '" + opoint.point_bm + "','" + opoint.point_code + "','" + xyArray[0] + "','" + xyArray[1] + "', '" + opoint.point_info + "')"; executeUpdate(sql, database); return "success"; } } catch (NullReferenceException e) { return e.StackTrace; } }
複製代碼

Data Source :  一個點默認爲本地數據庫,其餘數據庫填寫相應ip ; 

Initial Catelog:是目標數據庫名稱

咱們接收一個json數據,將其value填入一個實例化的類對象,經過這個類的實例化對象來使用它

OverlaysPoint opoint = JsonConvert.DeserializeObject<OverlaysPoint>(data);

根據json建立的OverPoint類:

複製代碼
public class OverlaysPoint
    {
        public string point_type;
        public string point_bm;
        public string point_code;
        public string position;
        public string point_info;
        public string con_bussiness;
        public string con_entity;
        public string con_fields;
        public string showpic;
        public string showtext;
        public string showdata;
        public string create_time;
        public string data_refresh_rate;
    }
複製代碼

executeQuery和executeUpdate方法(可重用):

複製代碼
//對數據庫操做
        //用於查詢
        private DataTable executeQuery(string sqlStr, string sqlCon)      
        {
            SqlConnection con = new SqlConnection(@sqlCon);
            con.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sqlStr;
            DataTable dt = new DataTable();        //實例化數據表
            SqlDataAdapter msda;
            msda = new SqlDataAdapter(cmd);        //實例化適配器
            msda.Fill(dt);                        //保存數據
            con.Close();
            return dt;
        }
        //用於增刪改;
        private int executeUpdate(string sqlStr, string sqlCon)      
        {
            SqlConnection con = new SqlConnection(@sqlCon);
            con.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sqlStr;
            int iud = 0;
            iud = cmd.ExecuteNonQuery();
            con.Close();
            return iud;
        }
複製代碼

 

 要使用JsonConvert須要引入外部依賴包 Newtonsoft.Json.dll 。

右鍵項目解決方案-添加引用-

 

 2.ajax調用:

複製代碼
 
                  
var jsonOverlays = JSON.stringify(data.field).replace(/\"/g,"'");// 將json數據的雙引號替換爲單引號
$.ajax({
                type:"POST",
                contentType: "application/json; charset=utf-8",
                url:"http://192.168.21.1:7777/WebService1.asmx/InsertPoint",
                data: "{\"data\":\"" + jsonOverlays + "\"}",  //這是post請求要傳遞的參數
                dataType: 'json', //預期返回類型
                success: function(result){    //回調函數
                    layer.msg('ajax調用成功' + result.d);
                    console.log(result.d);
                },
                error: function (data) {
                    //200的響應有可能被認爲error, responseText中沒有Message部分
                    alert('error');
                },
                complete: function (data) {
                    ; //after success ot error
                }
            });
複製代碼

注意:1.雙引號替換爲單引號  2.構造data的參數 

 

ps:報錯:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access.

解決跨域問題:

 

複製代碼
<httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Credentials" value="true"/>
            <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
            <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/>
            <add name="Access-Control-Allow-Origin" value="*"/>
        </customHeaders>
    </httpProtocol>
複製代碼

 

 

2019-1-22測試無誤:

 

若是出錯,注意查看瀏覽器端控制檯報錯(ajax出錯)和vs輸出窗口(c#方法出錯)

 

 

 

C# 實體類轉json數據過濾掉字段爲null的字段

 

C# 實體類轉json數據過濾掉字段爲null的字段

語法以下:

var jsonSetting = new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore};

var json = JsonConvert.SerializeObject(data,Formatting.Indented,jsonSetting)

1,null值未處理以前的數據結構:

2,null值處理以後的數據結構:

很簡單的操做哈!

相關文章
相關標籤/搜索