C# 带mysql的Dapper dot net,致命或全部插入为空

C# 带mysql的Dapper dot net,致命或全部插入为空,c#,mysql,dapper,C#,Mysql,Dapper,我的代码 它给了我 “执行命令时遇到致命错误。” 当我在另一种情况下执行另一个insert查询时,它工作得很好,不同的是,这里我将cbxIsManager作为bool,在db中是一个tinyint(1),在另一种情况下,所有都是字符串 如果我添加“Allow User Variables=true;”,那么我不会得到异常,但在db中所有值都为null(检查他是否得到值) 在这个项目中使用ASP.NET,在另一个项目中使用console,FW4和mysql都是6.somthing(想想3) 另一个

我的代码

它给了我 “执行命令时遇到致命错误。”

当我在另一种情况下执行另一个insert查询时,它工作得很好,不同的是,这里我将cbxIsManager作为bool,在db中是一个tinyint(1),在另一种情况下,所有都是字符串

如果我添加“Allow User Variables=true;”,那么我不会得到异常,但在db中所有值都为null(检查他是否得到值)

在这个项目中使用ASP.NET,在另一个项目中使用console,FW4和mysql都是6.somthing(想想3) 另一个代码

string query = @"INSERT INTO representative_dev.representative_users
                                (Username, Password, FullName, 
                                HomePhone, PhoneToCall, 
                                CompanyEmail, PersonalEmail, 
                                IsManager) 
                            VALUES (@Username, @Password, @FullName, 
                                    @HomePhone, @PhoneToCall,
                                    @CompanyEmail, @PersonalEmail, 
                                    @IsManager);";
            mycon.Open();
            int cnt = mycon.Execute(query,
                new
                {
                    txtUsername,
                    txtPassword,
                    txtFullName,
                    txtHomePhone,
                    txtPhoneToCall,
                    txtCompanyEmail,
                    txtPersonalEmail,
                    cbxIsManager
                });
            mycon.Close();
任何帮助都将不胜感激

阿瑞尔

编辑: 这是什么时候起作用的

        string query = @"INSERT INTO representative_dev.potencial_contact
                    (Name, Company_ID, Phone, Email, Department, Notes, SuperFriend, UpdateDate) 
                    VALUES (@Name, @Company_ID, @Phone, @Email, @Department, @Notes, @SuperFriend, @UpdateDate);";
        mycon.Open();
        int cnt = mycon.Execute(query,
            new
            {
                con.Name,
                con.Company_ID,
                con.Phone,
                con.Email,
                con.Department,
                con.Notes,
                con.SuperFriend,
                con.UpdateDate
            });
        mycon.Close();

仍然在寻求帮助,因为我想使用dapper…

尝试以下方法:

            string query = @"INSERT INTO representative_dev.representative_users
                                (Username, Password, FullName, 
                                HomePhone, PhoneToCall, 
                                CompanyEmail, PersonalEmail, 
                                IsManager) 
                            VALUES ('" + txtUsername + @"', '" + txtPassword + @"', '" + txtFullName + @"', 
                                    '" + txtHomePhone + @"', '" + txtPhoneToCall + @"',
                                    '" + txtCompanyEmail + @"', '" + txtPersonalEmail + @"', 
                                    " + cbxIsManager + ");";

            int cnt = mysql.ExecuteInsert(query);
公共类代表程序
{
公共字符串用户名{get;set;}
公共字符串Pasword{get;set;}
//等
公共int IsManager{get;set;}
}
public void InsertRepresentativeUser(RepresentativeUser RepresentativeUser)
{
const string query=@“插入到代表\u dev.representative\u用户中”
(用户名、密码、,
iManager)
值(@Username、@Password、,
@管理者);
从代表开发者代表用户中选择计数(*);
var count=DbConnection.Query(查询,
刚出现的
{
representativeUser.UserName,
代表帕斯沃德先生,
代表性经理
});
}
主要的变化是使用查询扩展vs执行。Execute不返回结果,我看到您希望返回一些计数,例如“int cnt=mycon.Execute(query)”

我还将查询包装到一个方法中;现在您的客户机只需要发送一个新的RepresentativeUser来插入。这样您还可以控制数据类型

希望这有帮助。
祝你好运

试着用
s替换
@
s。它似乎对我有用:

public class RepresentativeUser
{
    public string UserName { get; set; }
    public string Pasword { get; set; }
    //etc
    public int IsManager { get; set; }
}

public void InsertRepresentativeUser(RepresentativeUser representativeUser)
{
    const string query = @"INSERT INTO representative_dev.representative_users
                        (Username, Password, 
                        IsManager) 
                    VALUES (@Username, @Password,
                            @IsManager);
                    select count(*) from representative_dev.representative_users";

    var count = DbConnection.Query<decimal>(query,
        new
        {
            representativeUser.UserName,
            representativeUser.Pasword,
            representativeUser.IsManager
        });
}

不,它没有帮助,仍然会得到相同的错误,顺便说一句。我在RepresentativeUser对象中作为.InsertToDb()执行所有这些操作因为我把它作为一个接受RepresentativeUser的webmethod,它仍然是一样的,cmd抛出异常。无论如何,thx!问题很可能是因为MySql在模型类(cbxIsManager)中使用了一个tinyint作为它的布尔表示将属性设置为布尔值。在使用dapper执行之前,您可以尝试将布尔值转换为整数。我还在MySQL中使用dapper.NET,无论我尝试了什么,参数化插入总是会导致插入空值。我最终放弃并求助于不使用参数,而是显式使用EDI中的值T在上面。
string query = @"INSERT INTO representative_dev.representative_users 
                 (Username, Password, FullName, HomePhone, PhoneToCall, CompanyEmail,
                  PersonalEmail, IsManager) VALUES (:Username, :Password, :FullName,
                  :HomePhone, :PhoneToCall, :CompanyEmail, :PersonalEmail, :IsManager);";