前言:因为最近学习,学到Core了 ,就花了两个小时搞了下面这样一个例子,仅供参考。
1.创建数据库
小编选用的SqlSever(VS2019自带)
1.1 数据库创建
1.2 创建测试表
手动创建也可以,执行下面的语句也行
CREATE TABLE [dbo].[T_SYS_USER] ( [ID] INT IDENTITY (1, 1) NOT NULL, [USER_ID] NCHAR (10) NULL, [USER_NAME] NCHAR (10) NULL, [USER_PASSWORD] NCHAR (10) NULL );
1.3 获取数据库连接
如下图:
双击选中连接字符串复制即可。
1.4 注意
数据库表建成之后,可能会出现中文乱码的情况,执行以下语句即可解决。
ALTER DATABASE [数据库名] COLLATE Chinese_PRC_CI_AS
2. Asp.net Core WebApi
2.1 创建项目
如下图,选中箭头所指类型后,点击下一步。
接下来就是配置项目存放位置和项目名称,在此就不再截图一一赘述了。
2.2 启动项目。
下面就是启动后的画面了,小编这里的端口号是44386,你们的是多少呢?
咱们紧接着这个url 往后拼 api/values ,最后小编的结果是(localhost:44386/api/values),然后打开是下面的画面,就证明,这个程序没有啥问题了!
2.3 创建一个Model类
public class SysUserModel { private int _id; private string _userId; private string _userName; private string _userPassWord; public int Id { get => _id; set => _id = value; } public string UserId { get => _userId; set => _userId = value; } public string UserName { get => _userName; set => _userName = value; } public string UserPassWord { get => _userPassWord; set => _userPassWord = value; } }
2.4 DatabaseConnection类
创建一个操作数据库的DatabaseConnection类
public class DatabaseConnection { #region 属性变量 public static string connectionString = @"连接字符串"; #endregion #region 操作数据库 #region 查询--返回Dataset /// <summary> /// Execute a OracleCommand (that returns a resultset) against the specified OracleTransaction /// using the provided parameters. /// </summary> [Obsolete] public static DataSet ExecuteDataSet(System.Data.SqlClient.SqlTransaction transaction, string commandText) { return ExecuteDataSet(transaction, CommandType.Text, commandText, null); } /// <summary> /// Execute a OracleCommand (that returns a resultset) against the specified OracleTransaction /// using the provided parameters. /// </summary> [Obsolete] public static DataSet ExecuteDataSet(System.Data.SqlClient.SqlTransaction transaction, CommandType commandType, string commandText, System.Data.SqlClient.SqlParameter[] commandParameters) { DateTime ExecuteReaderStart = DateTime.Now; SqlCommand command = new SqlCommand(); PrepareCommand(command, transaction.Connection, transaction, commandType, commandText, commandParameters); using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command)) { DataSet dataSet = new DataSet(); dataAdapter.Fill(dataSet); DateTime ExecuteReaderEnd = DateTime.Now; command.Parameters.Clear(); return dataSet; } } /// <summary> /// Internal function to prepare a command for execution by the database /// </summary> /// <commandParameters name="command">Existing command object</commandParameters> /// <commandParameters name="connection">Database connection object</commandParameters> /// <commandParameters name="transaction">Optional transaction object</commandParameters> /// <commandParameters name="commandType">Command type, e.g. stored procedure</commandParameters> /// <commandParameters name="commandText">Command test</commandParameters> /// <commandParameters name="commandParameters">Parameters for the command</commandParameters> [Obsolete] private static void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters) { try { String ParametersStr = "参数集合:"; if (connection.State != ConnectionState.Open) { connection.Open(); } command.Connection = connection; command.CommandText = commandText; command.CommandType = commandType; if (transaction != null) { command.Transaction = transaction; } if (commandParameters != null) { foreach (SqlParameter parameter in commandParameters) { command.Parameters.Add(parameter); } } } catch (Exception exception) { throw new Exception("OracleHelper底层逻辑执行出错," + exception.Message); } } #endregion #region 修改添加--返回受影响行数 /// <summary> /// Execute an OracleCommand (that returns no resultset) against an existing database transaction /// using the provided parameters. /// </summary> [Obsolete] public static int ExecuteNonQuery(SqlTransaction transaction, string commandText) { return ExecuteNonQuery(transaction, commandText, null); } /// <summary> /// Execute an OracleCommand (that returns no resultset) against an existing database transaction /// using the provided parameters. /// </summary> [Obsolete] public static int ExecuteNonQuery(SqlTransaction transaction, string commandText, SqlParameter[] commandParameters) { return ExecuteNonQuery(transaction, CommandType.Text, commandText, commandParameters); } /// <summary> /// Execute an OracleCommand (that returns no resultset) against an existing database transaction /// using the provided parameters. /// </summary> [Obsolete] public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters) { SqlCommand command = new SqlCommand(); PrepareCommand(command, transaction.Connection, transaction, commandType, commandText, commandParameters); int value = command.ExecuteNonQuery(); command.Parameters.Clear(); return value; } #endregion #endregion }
2.5 写一个Post方法
在文件ValuesController中写一个新增表数据的方法,如下:
[HttpPost] [Route("api/InsertDataMaster")] public int InsertDataMaster([FromBody] SysUserModel sys) { int count = 0; string sql = string.Empty; Console.WriteLine(sys.Id); sql = string.Format(@"INSERT INTO [dbo].[T_SYS_USER] ([USER_ID], [USER_NAME], [USER_PASSWORD]) VALUES ('{0}','{1}','{2}')", sys.UserId, sys.UserName, sys.UserPassWord); using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlTransaction transaction = connection.BeginTransaction(); try { count= DatabaseConnection.ExecuteNonQuery(transaction,sql); if (count < 1) throw new Exception("添加失败!"); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); throw new Exception("数据库操作失败。错误信息:" + ex.Message); } finally { connection.Close(); } } return count; }
3. winfrm 创建
3.1 创建项目
如下图,创建即可:
项目创建的项目名称路径等,就不再一一赘述!
3.2 窗体创建
如下图:
在窗体上添加一个Button按钮。
3.3 代码编写
private void button1_Click(object sender, EventArgs e) { string url = "https://localhost:44320/api/InsertDataMaster"; string jsonData = "{\"UserName\":\"李嘿嘿\"," + "\"UserId\":\"005\"," + "\"UserPassWord\":\"007\"}"; string aaa= doHttpPost(url, jsonData); MessageBox.Show(aaa); } public static string doHttpPost(string Url, string postDataStr) { CookieContainer cookie = new CookieContainer(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; request.ContentType = "application/json"; request.CookieContainer = cookie; Stream myRequestStream = request.GetRequestStream(); StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("utf-8")); myStreamWriter.Write(postDataStr); myStreamWriter.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.Cookies = cookie.GetCookies(response.ResponseUri); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; }
以上需要写的内容就基本完成了!
4. 调试
启动上述两个项目,在winfrm项目中点击button按钮,就可以将winfrm中的数据通过asp.net 写入数据库了!