C# Winfrm 调用 Asp.net Core WebApi

前言:因为最近学习,学到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 写入数据库了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值