【问题标题】:Not inserting data into SQL Server database using C#不使用 C# 将数据插入 SQL Server 数据库
【发布时间】:2020-04-29 18:27:55
【问题描述】:

我正在使用 C# 在 Web API 中编写聊天应用程序,使用 SQL Server 数据库在 VS 代码中使用 ASP.NET。连接正常,我将数据库写入.cs 文件并添加EF Migration。也许我对SqlCommand 有疑问。

代码如下:

public async Task SendMessage(string user, string message)
{
    string connn;
    connn = "Server=DESKTOP-U7SBTFN;Database=BCchat;Uid=sa;Pwd=123456789;";

    System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connn);

    try 
    { 
        Console.WriteLine("Connecting to MySql...");
        con.Open();
        Console.WriteLine("Connection Open!");

        System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("insert into Messages(Username, Message) values ('"+user+"','"+message+"')", con);
    }
    catch (Exception exc)
    {
        Console.WriteLine(exc.ToString());
    }

    con.Close();
    Console.WriteLine("Done!");
    Console.WriteLine($"user={user}, message={message}");

    await Clients.All.SendAsync("ReceiveMessage", user, message);
}

这是 Messages.cs 和 DBContext.cs 的代码:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace probagetrequest.Models
{
    [Table("Messages")]
    public class Messages
    {
        [Key]
        public int Id { get; set; }
        public string Username { get; set; }
        public string Message { get; set; }
    }
}

using System;
using Microsoft.EntityFrameworkCore;

namespace probagetrequest.Models
{
    public class DatabaseContext : DbContext
    {
        public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options)
        {
        }

        public DbSet<Messages> Messagees { get; set; }
        public DbSet<Account> Accounts { get; set; }
    }
}

【问题讨论】:

  • 您到底想达到什么目的?因为您同时使用 SQL 命令和实体框架。我不太确定你想要什么工作。
  • @Josjr87 请查看this 指南,了解如何询问 StackOverflow 问题。
  • @szaszagado 应该检查一下 ;-)
  • 对不起,我正在学习编程,我对数据库有点困惑。我想将用户和消息存储在数据库中。在我在 MongoDB 中制作它之前,它可以工作,但现在我需要更改为 MSSQL。

标签: c# asp.net sql-server database visual-studio-code


【解决方案1】:

据我所知,您不会执行命令。我不确定 EF 部分在做什么,所以会忽略这一点。

string query = "INSERT INTO Messages (Username, Message) VALUES (@username, @message)";
var cmd = new SqlCommand(query, con);

cmd.Parameters.Add("@username", user);
cmd.Paramaters.Add("@message", message);

//Execute
cmd.ExecuteNonQuery();

【讨论】:

    【解决方案2】:

    正如@Jsjr87 已经提到的那样;你使用 EF AND SQL-Commands。使用实体框架,您通常不需要编写任何 sql 命令。

    首先,将连接字符串保存到 Json 文件中的 SQL Server (appsettings.json)

    "ConnectionStrings": {
        "DefaultConnection": "Server=DESKTOP-U7SBTFN;Database=BCchat;Uid=sa;Pwd=123456789;Trusted_Connection=True;MultipleActiveResultSets=true"
      }
    

    DbContext中设置连接字符串;

    public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options)
    {
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    }
    

    使用您的消息插入;

    using (var db = new DatabaseContext())
    {
        var message = new Messages { Username  = user, Message = name };
        db.Messages.Add(message);
        db.SaveChanges();
    }
    

    看看here

    【讨论】:

    • appsettings.json 建议使用 ASP.NET Core - 但 OP 并未以任何方式、形状或形式提及“Core”...
    【解决方案3】:

    在您的问题中,有 EF 实施。 可以使用EF插入数据

    using (var db = new YourDBContext())
    {
     //add to EF Model
     //save change
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-22
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多