ado.net "No mapping exists from object type xo.Player to a known managed provider native type."



我正在尝试将DB连接到我在C#.NET中制作的XO游戏现在我已经有了一张表,我正在尝试将值插入其中,并且我得到了一个错误

这是我的代码:

        SqlConnection con = new SqlConnection
        (@"Data Source=.SQLExpress;Initial Catalog=ExampleDB;Integrated Security=True");
        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "insert into XOhalloffame (PlayerName ,Winnings, Losses) values ('@name', '@win', '@lose')";
        cmd.Parameters.AddWithValue("name", Session["player1"]as Player);
        cmd.Parameters.AddWithValue("win",0);
        cmd.Parameters.AddWithValue("win",0);
        cmd.ExecuteNonQuery();
        con.Close();

** player1的session是ASP文本框,我希望玩家动态插入名称。

错误是:

No mapping exists from object type xo.Player to a known managed provider native type.

在您的INSERT字符串中,替换以下

values ('@name', '@win', '@lose')

values (@name, @win, @lose)

在SQL查询中声明标量变量时,您不需要撇号。

还需要将@符号放在cmd.Paramaters.AddWithValue()呼叫中,例如:

cmd.Parameters.AddWithValue("@Name", yourValue);
cmd.Parameters.AddWithValue("@Win", yourvalue);
cmd.Parameters.AddWithValue("@Lose", yourValue);

为了解决错误,我认为当您真的只想要玩家的名字时,您正在尝试将Player对象传递到查询中。没有看到您的Player实现,很难说,但是您想要这样的东西。

cmd.Parameters.AddWithValue("@name", Session["player1"].Text);

错误告诉您Player不是SQL的已知类型,因此无法将其插入带有(可能)VARCHAR键入的列中。您只需要从文本框或Player对象的Name属性输入实际文本。

我意识到这个答案涵盖的范围不仅仅是您的问题,但是如果您不修复语法,您可能会遇到更多错误。

相关内容

最新更新