C#NpgsqlCommand - AddWithValue不代替

时间:2017-09-28 05:14:35

标签: c# postgresql npgsql

所以让我首先说明我知道同样的问题还有其他问题 - 我已经阅读了大部分内容并尝试了不同的事情......没有任何效果......所以请不要因为“重复”而关闭“因为那些 为我工作。

我也使用Postgres作为我的数据库。

感谢先进的协助。

public static string RetrieveEntry(string table, string lookup)
        {
            Console.WriteLine("RetrieveEntry");
            if (!IsConnected())
            {
                return "Request Failed";
            }
            string str = "No poll were found that contained that info.";
            string sqlstring = "SELECT * FROM "+table+" WHERE topic = '@t' OR description LIKE '@d' OR started_by = '@sb'";
            NpgsqlCommand sql = new NpgsqlCommand(sqlstring,conn);
            sql.Parameters.AddWithValue("@t", lookup);
            sql.Parameters.AddWithValue("@d", "%" + lookup + "%");
            sql.Parameters.AddWithValue("@sb", lookup);
            NpgsqlDataAdapter adap = new NpgsqlDataAdapter(sqlstring,conn);
            DataSet ds = new DataSet();
            adap.Fill(ds);
            Console.WriteLine("Table: "+ds.Tables[0].TableName+"; Tables: "+ds.Tables.Count+"; Rows: "+ds.Tables[0].Rows.Count);
            if (ds.Tables[0].Rows.Count > 0) str = ""; //Remove default string

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                str += "Topic:\t" + dr["topic"] +
                    "\nDesc:\t" + dr["description"].ToString().Substring(0, Math.Min(25, dr["description"].ToString().Length)) + "\n\n";
            }

            return str;

        }

2 个答案:

答案 0 :(得分:1)

使用阅读器会解决问题吗?

ds.Load(NpgsqlDataReader reader = sql.ExecuteReader(CommandBehavior.CloseConnection));

来自answer

答案 1 :(得分:0)

我知道已经有点晚了,但是我真的认为您不应该在AddWithValue参数中使用@字符。

类似:

        sql.Parameters.AddWithValue("t", lookup);
        sql.Parameters.AddWithValue("d", "%" + lookup + "%");
        sql.Parameters.AddWithValue("sb", lookup);