ado.net“从对象类型xo.Player到已知的托管提供者本机类型不存在映射。”

时间:2014-01-21 15:57:19

标签: c# .net ado.net

我正在尝试将数据库连接到我用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.

1 个答案:

答案 0 :(得分:2)

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类型的列中。您只需输入文本框中的实际文本或Name对象的Player属性。

我意识到这个答案不仅仅包含您的问题,但如果您不修复语法,则可能会遇到更多错误。