Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
C# 连接级数据库-如何编辑表_C#_Sql_Sql Server_Stored Procedures_Dll - Fatal编程技术网

C# 连接级数据库-如何编辑表

C# 连接级数据库-如何编辑表,c#,sql,sql-server,stored-procedures,dll,C#,Sql,Sql Server,Stored Procedures,Dll,使用c#,.net Framwork 4.5与12 尝试了解数据库访问的连接级别。 这个问题有很长的解释 目前正在创建数据库、简单程序、用于数据库工作的dll和用于访问db的控制台应用程序 关于创建的几句话: 我的数据库下一步: 过程-GetPetName: ALTER PROCEDURE GetPetName ( @carId int, @petName char(10) OUTPUT ) AS SELECT @petName = PetName from Inventory wher

使用c#,.net Framwork 4.5与12

尝试了解数据库访问的连接级别。
这个问题有很长的解释

目前正在创建数据库、简单程序、用于数据库工作的dll和用于访问db的控制台应用程序

关于创建的几句话:

我的数据库下一步:

过程-
GetPetName

ALTER PROCEDURE GetPetName  (   @carId int, @petName char(10) OUTPUT )
AS
SELECT @petName = PetName from Inventory where CarId = @carId
同样在dll中,我为我的数据库创建了连接,在控制台应用程序中,我尝试使用这个dll中的方法

问题是,很少的方法不起作用,也不知道为什么——检查了几次方法,但都没有结果。还提供了更新信息和显示DB works中所有信息的方法

有问题的方法,以及我在这方面遇到的问题-描述如下:

  • 使用数据库中的过程的方法

    public string LookUpPetName(int CarID)
    {
        string CarPetName = string.Empty;
        using (SqlCommand cmd = new SqlCommand("GetPetName", this.sqlCn))
        {
            cmd.CommandType = CommandType.StoredProcedure;
    
            SqlParameter param = new SqlParameter();
            param.ParameterName = "@carID";
            param.SqlDbType = SqlDbType.Int;
            param.Value = CarID;
            param.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(param);
    
            param = new SqlParameter();
            param.ParameterName = "@petName";
            param.SqlDbType = SqlDbType.Char;
            param.Size = 10;
            param.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(param);
    
            CarPetName = (string)cmd.Parameters["petName"].Value;
        }
        return CarPetName;
    }
    }
    
  • 使用此方法,当我尝试调用它时,得到错误消息-下一个描述问题
    SQLParameterName为“petName”的SQLParameter在您的SQLParameterCollection中不存在。但据我所知,我使用过程
    GetPetName
    返回
    petName

    问题1-我是否正确理解db程序的用法?如果没有-请为我解释一下,如果是,为什么我会得到这样的结果

    第二种方法是为在我的表中插入条目而创建的——下面我来介绍

     public void InsertoAuto(int CarID, string Color,
            string Make, string PetName)
        {
            string sql = string.Format("Insert into Inventory"
                + " (CarID, Make, Color, PetName) Values"
                + ("@mycarID, @Make, @Color, @PetName"));
    
            using (SqlCommand sqlCommand = new SqlCommand(sql, this.sqlCn))
            {
                //add parameters - help to avoid attacks, 
                //make request a little bit faster
                SqlParameter param = new SqlParameter();
                param.ParameterName = "@mycarID";
                param.Value = CarID;
                param.SqlDbType = SqlDbType.Int;
                sqlCommand.Parameters.Add(param);
    
                param = new SqlParameter();
                param.ParameterName = "@Make";
                param.Value = Make;
                param.Size = 10;
                param.SqlDbType = SqlDbType.Char;
                sqlCommand.Parameters.Add(param);
    
                param = new SqlParameter();
                param.ParameterName = "@Color";
                param.Value = Color;
                param.Size = 10;
                param.SqlDbType = SqlDbType.Char;
                sqlCommand.Parameters.Add(param);
    
                param = new SqlParameter();
                param.ParameterName = "@PetName";
                param.Value = PetName;
                param.Size = 10;
                param.SqlDbType = SqlDbType.Char;
                sqlCommand.Parameters.Add(param);
    
                sqlCommand.ExecuteNonQuery();
            }
        }
    
    和第二个插入变量(使用某些实体)

    当我尝试调用此方法时(注意:在调用方法之前,我得到了一个int值和3个字符串值),我得到了描述错误-
    第一个方法的“@mycarID”
    的语法错误,第二个变量的PetName
    的语法错误。但是,如果字符串值的所有参数都正常,那么这个参数有什么问题呢。还要检查(正如您看到的),表中使用了相同类型的变量

    问题2-这个方法哪里错了,为什么不能取int参数

    另外,在创建用于处理数据库的dll时,我发现,如果我不将dll中的方法用于其他项目,则无法检查dll中的方法的功能

    附加问题-在创建DLL的过程中,是否有一些方法可以检查方法,或者我总是必须创建一些“支持”项目来并行检查我的DLL的可操作性?意味着如何在创建过程中逐步进行调试


    一篇文章有很多问题,但把它们放在一起,以减少其他文章中问题的解释部分。

    在第一种方法中,将最后一行更改为:

    cmd.ExecuteNonQuery();
    CarPetName = (string)cmd.Parameters["@petName"].Value;
    
    您没有执行该命令,还需要注意参数名称前的
    @

    在第二种方法中,将括号保留在查询之外:

    + ("@mycarID, @Make, @Color, @PetName")); 
    
    应该是

    + "(@mycarID, @Make, @Color, @PetName)");  // note the parenthesis inside the string
    
    在第三种方法中,您将
    CarId
    与字符串进行比较

    Where CarID = '{1}' 
    
    应该是

    Where CarID = {1} 
    

    当然,它不应该这样做:您应该像以前一样使用参数。

    在存储过程中,您没有在执行commandBefore
    ru毯名称=(string)cmd.parameters[“petName”].Value
    应该执行命令。比如
    cmd.ExecuteNonQuery()?是的,您还应该在参数名
    (string)cmd.Parameters[“@petName”].Value之前放置一个
    @
    Where CarID = {1}