Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将对象类放入SQL查询c#?_C#_Sql Server_Class - Fatal编程技术网

如何将对象类放入SQL查询c#?

如何将对象类放入SQL查询c#?,c#,sql-server,class,C#,Sql Server,Class,我想将对象“gebruiker”的值从类“Gebruikersklasse”放到按钮单击中的查询中。查询将被发送到“Databaseconnection”类并在那里执行。如果我运行这个,我会出错。它告诉我找不到gebruikers.Naam。所以他找不到一个叫做“gebruiker”的东西 如果我将查询更改为手动值,它就会工作 我正在使用这些类: using System; using System.Collections.Generic; using System.Linq; using Sy

我想将对象“gebruiker”的值从类“Gebruikersklasse”放到按钮单击中的查询中。查询将被发送到“Databaseconnection”类并在那里执行。如果我运行这个,我会出错。它告诉我找不到gebruikers.Naam。所以他找不到一个叫做“gebruiker”的东西

如果我将查询更改为手动值,它就会工作

我正在使用这些类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BurnThatFat
{
    class Gebruikerklasse
    {
        public string Naam;
        public string Achternaam;
        public int Leeftijd;
        public string Geslacht;
        public int Huidiggewicht;
        public int Streefgewicht;
        public string Gebruikersnaam;
        public string Email;
        public string Wachtwoord;
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// voor sql connectie.
using System.Data.SqlClient;
using System.Windows.Forms;
这是数据库连接的代码(执行查询)

这是
按钮单击
代码:

private void btn_emailvolgende_Click(object sender, EventArgs e)
{
    gebruiker = new Gebruikerklasse();
    gebruiker.Naam = Convert.ToString(tb_voornaam.Text);
    gebruiker.Achternaam = Convert.ToString(tb_achternaam.Text);
    gebruiker.Leeftijd = Convert.ToInt32(nud_leeftijd.Value);
    gebruiker.Geslacht = Convert.ToString(cb_geslacht.Text);
    gebruiker.Huidiggewicht = Convert.ToInt32(nud_huidiggewicht.Value);
    gebruiker.Streefgewicht = Convert.ToInt32(nud_streefgewicht.Value);
    gebruiker.Gebruikersnaam = Convert.ToString(tb_gebruikersnaam2.Text);
    gebruiker.Email = Convert.ToString(tb_email.Text);
    gebruiker.Wachtwoord = Convert.ToString(tb_wachtwoordsignup.Text);

    db.QueryToDatabase("INSERT INTO Gebruiker ([Gebruiker-ID], Naam, Achternaam, Leeftijd, Geslacht, Huidig_gewicht, Streef_gewicht, Gebruikersnaam, Email, Wachtwoord) VALUES(1, gebruiker.Naam, gebruiker.Achternaam, gebruiker.Leeftijd, gebruiker.Geslacht, gebruiker.Huidiggewicht, gebruiker.Streefgewicht, gebruiker.Gebruikersnaam, gebruiker.Email, gebruiker.Wachtwoord);", gebruiker);
    gb_email.Visible = false;
}
编辑:

我得到的确切错误是:

BurnThatFat.exe中发生类型为“System.Data.SqlClient.SqlException”的未处理异常

其他信息:无法绑定多部分标识符“gebruiker.Naam”

无法绑定多部分标识符“gebruiker.Achternaam”

无法绑定多部分标识符“gebruiker.Leeftijd”

无法绑定多部分标识符“gebruiker.Geslacht”

无法绑定多部分标识符“gebruiker.Huidiggewicht”

无法绑定多部分标识符“gebruiker.Streefgewicht”

无法绑定多部分标识符“gebruiker.Gebruikersnaam”

无法绑定多部分标识符“gebruiker.Email”

无法绑定多部分标识符“gebruiker.Wachtwoord”


您需要将
gebruiker
值传递给SQL命令。现在你没那么做。您的
QueryToDatabase
应该通过传递参数进行扩展

public void QueryToDatabase(string commandText, Gebruikerklasse gebruiker)
{
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand(commandText, conn))
    {
        conn.Open();
        cmd.Parameters.AddWithValue("@Naam", gebruiker.Naam);
        cmd.Parameters.AddWithValue("@Achternaam, gebruiker.Achternaam);
        // do the same with others properties in gebruiker

        cmd.ExecuteNonQuery();
        conn.Close();
    }
}
你的问题也错了。您需要告诉SQL它应该在哪里查找参数

"INSERT INTO Gebruiker ([Gebruiker-ID], Naam, Achternaam, Leeftijd, Geslacht, Huidig_gewicht, Streef_gewicht, Gebruikersnaam, Email, Wachtwoord) VALUES(1, @Naam, @Achternaam, @Leeftijd, @Geslacht, @Huidiggewicht, @Streefgewicht, @Gebruikersnaam, @Email, @Wachtwoord);
SQL查询中的名称与
AddWithValue
中使用的名称应匹配


如果您不想手动执行此操作,请查看ORMs。

由于SQL找不到任何具有该名称的表或引用,因此会出现此错误,您可以通过存储过程实现类似的功能

首先在sql中创建过程:

CREATE PROCEDURE insertGebruiker(
    @Naam VARCHAR(50),
    @Achternaam VARCHAR(50),
    @Leeftijd INT, 
    @Geslacht VARCHAR(50),
    @Huidiggewicht INT,
    @Streefgewicht INT,
    @Gebruikersnaam VARCHAR(50),
    @Email VARCHAR(50),
    @Wachtwoord VARCHAR(50),
)
AS
BEGIN
INSERT INTO Gebruiker(
    [Gebruiker-ID],
    Naam,
    Achternaam,
    Leeftijd, 
    Geslacht,
    Huidig_gewicht,
    Streef_gewicht,
    Gebruikersnaam,
    Email,
    Wachtwoord) 
    VALUES (
    1,
    @Naam,
    @Achternaam,
    @Leeftijd , 
    @Geslacht,
    @Huidiggewicht ,
    @Streefgewicht ,
    @Gebruikersnaam ,
    @Email,
    @Wachtwoord,
)
END
现在从您的c#代码:

您只需使用过程的名称来调用它:

db.QueryToDatabase("insertGebruiker", gebruiker);

整个和准确的错误是什么?虽然这两个答案是正确的,因为您将对象传递到
querytodatabase
,但您甚至从未使用过它,但我认为您的问题在到达之前就出现了。@crowcoder我将确切的错误添加到了原始的post.ok中,因此这是一个SQL错误。按照其中一个答案所示去做,因为你不能将
gebruiker.Naam
放入字符串中,因为它不会以这种方式扩展变量的实际值。你能看看我的问题@2ndanswer吗?而
AddWithValue
不是设置参数值的首选方法,您不需要使用
块显式关闭
中的连接,@Pawełukasik的答案看起来不错。如果我发送一个没有参数@naam的查询,会发生什么?它会崩溃还是忽略它并继续使用@achternaam?我尝试了这个方法并得到以下错误:{“不正确的语法靠近”;“}该错误已解决,现在该错误:{“字符串或二进制数据将被截断。\r\n语句已终止。”}@Gigitex这意味着你的一列对于输入的数据来说太短了,所以我应该把它改为Varcar(MAX)?
public void QueryToDatabase(string procedureName, Gebruikerklasse gebruiker)
    {

        using (SqlConnection conn = new SqlConnection(connectionString))
        using (SqlCommand cmd = new SqlCommand(procedureName, conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@Naam", gebruiker.Naam);
            cmd.Parameters.AddWithValue("@Achternaam", gebruiker.Achternaam);
            cmd.Parameters.AddWithValue("@Leeftijd", gebruiker.Leeftijd);
            cmd.Parameters.AddWithValue("@Geslacht", gebruiker.Geslacht);
            cmd.Parameters.AddWithValue("@Huidiggewicht", gebruiker.Huidiggewicht);
            cmd.Parameters.AddWithValue("@Streefgewicht", gebruiker.Streefgewicht);
            cmd.Parameters.AddWithValue("@Gebruikersnaam", gebruiker.Gebruikersnaam);
            cmd.Parameters.AddWithValue("@Email", gebruiker.Email);
            cmd.Parameters.AddWithValue("@Wachtwoord", gebruiker.Wachtwoord);

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();

        }
    }
db.QueryToDatabase("insertGebruiker", gebruiker);