标签: sqlparameter

VB.Net IIf函数在添加SqlParameter时

我正在重写这个长INSERT语句和参数,看起来像这样:

    cmd.Parameters.AddWithValue("@Website", General.fnSQLNullValues(tWebsite.Text))
Run Code Online (Sandbox Code Playgroud)

其中General.fnSQLNullValues是这样的:

        Public Shared Function fnSQLNullValues(ByVal sValue As Object, Optional ByVal Len As Integer = 999999) As Object
            If sValue Is Nothing Then Return DBNull.Value
            fnSQLNullValues = IIf(sValue.ToString.Length = 0, DBNull.Value, Left(sValue.ToString(), Len))
        End Function
Run Code Online (Sandbox Code Playgroud)

我根本不喜欢这个,似乎很多代码都是这样做的,

       cmd.Parameters.AddWithValue("@Website" , If(tWebsite.Text , DBNull.Value))
Run Code Online (Sandbox Code Playgroud)

根据我的理解,如果tWebsite.Text为null或未被接受,则DBNull.Value中的一行代码将替换tWebsite.Text作为值,在我看来,它与General中的其他函数做同样的事情.这是正确的,是一种比另一种更好的方式吗?

此外,我从第二种方式得到警告:"不能推断常见类型;对象假设",但在我看来,第一种方式是使用通用对象,所以我不知道我是否应该忽略这个警告

vb.net asp.net sqlparameter

4
推荐指数
1
解决办法
1449
查看次数

如何使用SQL参数从SQL Server获取数据集

我正在研究C#项目,我是这项技术的新手.

我想从SQL Server 2008中读取一些数据,然后编写以下代码

public User select(string username, string password)
{
    string connection = ConfigurationManager.ConnectionStrings["lawyersDBConnectionString"].ConnectionString.ToString();
    string sql = string.Format("select * from users where userName = '{0}' and password = '{1}'", username, password);

    SqlConnection con = new SqlConnection();            
    con.ConnectionString = connection;

    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(sql, con);            

    User user = new User();
    DataRow dr;

    try
    {
            da.Fill(ds);
            dr = ds.Tables[0].Rows[0];

            user.Id = Convert.ToInt16(dr["userID"]);                
            user.FirstName = (string)dr["firstName"];
            user.LastName = (string)dr["lastName"];
            user.Email = (string)dr["email"];
            user.Username = (string)dr["userName"];
            user.Password …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server sql-injection sqlparameter

4
推荐指数
1
解决办法
2万
查看次数

与LIKE和参数错误匹配

我想比较一个字符串,看它是否包含一个子字符串,但是,当我使用一个变量时,它应该为false时评估为true.

知道为什么会这样,以及如何解决这个问题?

DECLARE @Match VARCHAR
SET @Match = '%Matching%'

SELECT CASE WHEN 'Does This Match' LIKE @Match THEN 1 ELSE 0 END -- 1
SELECT CASE WHEN 'Does This Match' LIKE '%Matching%' THEN 1 ELSE 0 END -- 0
Run Code Online (Sandbox Code Playgroud)

sql-server sqlparameter

4
推荐指数
1
解决办法
65
查看次数

使用sql参数转义SQL LIKE语句中的特殊字符

我有一张包含产品的表格.我需要查询查找所有匹配结果到用户输入值.我SqlParameter用于插入输入.

SqlCommand findProcutsByPattern = new SqlCommand(
    "SELECT *" +
    " FROM [Products]" +
    " WHERE ProductName LIKE @pattern", connection);

findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%');
Run Code Online (Sandbox Code Playgroud)

当用户输入字符串包含'_'或'%'时,问题就出现了,因为它们被解释为特殊字符.另一方面,考虑到这一点:

命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证.与命令文本不同,参数输入被视为文字值,而不是可执行代码.

我不应该有这样的问题.我是否需要替换/转义输入字符串中的所有'_'和'%',或者是否有更优雅的解决方案.我希望输入被视为文字.

我在表中有一些记录,其中包括名称中的特殊字符(N_EW,N\EW,N%EW,N"EW,N'EW).指定\,"'作为输入工作正常(考虑它们)作为文字).

c# sql sql-server escaping sqlparameter

4
推荐指数
1
解决办法
1万
查看次数

提供SqlDbType的有效方法?

我在下面有这个工作代码.但是,我没有SqlParameter构造函数,它接受name,value和SqlDbType,我想只提供日期参数的类型.有没有办法做到这一点,不需要添加大量的代码?

SqlParameter[] parameters =  
{
    new SqlParameter("@START_ORDER", startOrder),
    new SqlParameter("@END_ORDER", endOrder), 
    new SqlParameter("@START_ITEM", startItem), 
    new SqlParameter("@END_ITEM", endItem), 
    new SqlParameter("@START_DUEDATE", dateFrom), 
    new SqlParameter("@END_DUEDATE", dateTo)
};
Run Code Online (Sandbox Code Playgroud)

c# sqlparameter

4
推荐指数
1
解决办法
95
查看次数

在存储过程中创建SQL变量表

我想在存储过程中创建包含这个的SQL变量表;

Select a,b,c,d from **@tablename** where a=1 and c=0
Run Code Online (Sandbox Code Playgroud)

创建sp时如何用sp做到这一点?

sql stored-procedures sqlparameter

4
推荐指数
1
解决办法
2万
查看次数

SELECT TOP与参数的语法不正确

我曾经有过这个

Dt = MyMod.GetDataTable("SELECT TOP " & QuestionsPerCats(i) & " * From Questions WHERE CategoriesID ='" & Cats(i) & "' ORDER BY NEWID()")
Run Code Online (Sandbox Code Playgroud)

但现在我决定使用sqlparameters之类的

Dim cmd As New SqlCommand("SELECT TOP @QuestionsPerCats * From Questions WHERE CategoriesID = @CategoriesID ORDER BY NEWID()", conn)
Dim sqlParam As SqlParameter = Nothing
sqlParam = cmd.Parameters.Add("@QuestionsPerCats", SqlDbType.SmallInt)
sqlParam.Value = QuestionsPerCats(i)
sqlParam = cmd.Parameters.Add("@CategoriesID", SqlDbType.SmallInt)
sqlParam.Value = Cats(i)
Run Code Online (Sandbox Code Playgroud)

不幸的是"渲染"之类的

SELECT TOP @QuestionsPerCats * From Questions WHERE CategoriesID = @CategoriesID ORDER BY NEWID()
Run Code Online (Sandbox Code Playgroud)

并返回以下错误

Incorrect syntax near …
Run Code Online (Sandbox Code Playgroud)

sql vb.net asp.net sql-server-2005 sqlparameter

3
推荐指数
1
解决办法
1823
查看次数

VB.Net中的sqlParameters数组

我正在尝试在VB.Net中创建一个类型大小的参数数组:

Dim parameters() As SqlParameter = New SqlParameter() _
        {
          New SqlParameter("@first_name", SqlDbType.VarChar, 50) {Value = "john"},
          New SqlParameter("@last_name", SqlDbType.VarChar, 50) {Value = "doe"},
          New SqlParameter("@age", SqlDbType.Int) {Value = 18},
          New SqlParameter("@id", SqlDbType.Int) {Value = 123}
        }
Run Code Online (Sandbox Code Playgroud)

但VS说:价值'没有宣布.由于其保护级别,它可能无法访问

上面的代码有什么问题?

谢谢!

vb.net arrays sqlparameter

3
推荐指数
1
解决办法
1万
查看次数

使用MySqlCommand在一个查询中进行多个INSERT

我使用以下代码:

        string cmd = "INSERT INTO " + Tables.Lux() + " VALUES(NULL, @Position, @Mode, @Timer)";
        try
        {
            using (var MyConnection = new MySqlConnection(ConfigurationManager.ConnectionStrings["DataFormConnection"].ConnectionString))
            {
                using (MySqlCommand command = new MySqlCommand(cmd, MyConnection))
                {
                    MyConnection.Open();
                    command.Parameters.Add(new MySqlParameter("Position", Element.Position));
                    command.Parameters.Add(new MySqlParameter("Mode", Element.Mode));
                    command.Parameters.Add(new MySqlParameter("Timer", Element.Timer));
                    command.ExecuteNonQuery();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

我使用上面的代码从包含100个项目的元素列表中插入数据.我想只在一个查询中添加100个值,我知道SQL语句如下所示:

INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用这种MySqlCommand.Parameters方法应用该结构.

我的目标是传递此函数List<Element>而不是仅仅传递此函数Element并创建一个INSERT语句,其中列表中的所有项目仅在一个查询中执行.有什么帮助吗?

谢谢.

c# mysql sql sql-parametrized-query sqlparameter

3
推荐指数
1
解决办法
2647
查看次数

SqlParameter(String,Object)无法处理常量值

我有一个函数,可以向SQL Server数据库发送两个请求。但是,在第二个请求上,我得到一个SqlException并且参数@mpe丢失。如果我尝试0在的构造函数中设置常量值SqlParameter

    protected static string GetX(int mpe, string xsection, string xkey)
    {
        var xSetup = App.Current.Db.GetType<Data.CachedTypes.XSetup>(
            "where mpehotel=@mpe and xsection=@xsection and xkey=@xkey",
            new System.Data.SqlClient.SqlParameter("@mpe", mpe),
            new System.Data.SqlClient.SqlParameter("@xsection", xsection),
            new System.Data.SqlClient.SqlParameter("@xkey", xkey));

        if (mpe > 0 && xSetup == null)
        {
            // Fallback mechanism. Always tries to get the default for all MPEs.
            xSetup = App.Current.Db.GetType<Data.CachedTypes.XSetup>(
                "where mpehotel=@mpe and xsection=@xsection and xkey=@xkey",
                new System.Data.SqlClient.SqlParameter("@mpe", 0), <-- THIS FAILES!!
                new System.Data.SqlClient.SqlParameter("@xsection", xsection),
                new System.Data.SqlClient.SqlParameter("@xkey", …
Run Code Online (Sandbox Code Playgroud)

c# sql-server sqlparameter

3
推荐指数
1
解决办法
303
查看次数