Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Query to MySQL from ASP.net returns System.Byte[]

Posted on 2009-06-27
7
Medium Priority
?
1,995 Views
Last Modified: 2012-05-07
I have an ASP.net website that has been working fine. Some of what is displayed is retrieved from a MySQL database. For example, news items.

Recently where a date was retrieved and a URL consructed from info from the db suddenly started returning System.Byte[].

On googling this seemed to be related to a version of the odbc. After a lot of to-ing and fro-ing with the site's support, the odbc is the latest and MySQL is v5. The problem still remains.

All the while my "production" machine is an ancient laptop running win2000 (latest odbc 3.51 and MySQL5) everything works fine.

I have discovered however that on my vista desktop (latest odbc, MySQL) the problem also happens.

As dealing with the website support is like wading through treacle I thought I should try to fix it on the vista machine and I might then have an idea of what to do with the live site.

A workaround may be changing my code.

Still reading?

the c# code is posted below for one page where the problem occurs. The fields that show as System.Byte[] are the modified date and the "read more" link. Both have string operations applied to them. Removing this formatting results in the correct raw data being retrieved.
But one other field has string operations but is ok. The two that error involve a date and the other an int.

The url of an example is http://www.badttc.org.uk/olditems.aspx

Any idea what is going on here? and how I might get round it?


using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Data.Odbc;
using System.Data;
using System.Drawing;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Web;
using System;
 
public partial class _Default : System.Web.UI.Page
{
 
    private void Page_Load(object sender, System.EventArgs e)
    {
        // Put user code to initialize the page here
        LoadItems();
    }
    private void LoadItems()
    {
        string strConnstring = "DSN=MyODBCName;USER=user;PASSWORD=pass;";
 
        System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection(strConnstring);
        try
        {
            conn.Open();
 
            string sql = "select ID, head, ";
            sql += "if(length(item)> 50, concat(substring(item,1,50),' ...'),item) as item, ";
            sql += "concat('<A HREF=\"newsitem.aspx?from=ai&id=',ID,'\">Read item</a>') as ReadItem, ";
            sql += "substring(modified,1,11) as modified, forcetop, forceverytop ";
            sql += "from newsitems where deleted = 0 order by modified desc ";
 
            System.Data.Odbc.OdbcCommand cmd = new OdbcCommand(sql, conn);
            System.Data.Odbc.OdbcDataAdapter da = new OdbcDataAdapter(cmd);
 
            System.Data.DataSet ds = new DataSet();
            da.Fill(ds);
            //this.txtHead1.ScrollBars = ScrollBars.None ;
            this.DataGrid1.DataSource = ds;
            this.DataGrid1.DataBind();
        }
        catch (Exception ex)
        {
            this.lblItem1.Text = ex.Message.ToString();
        }
        finally
        {
            conn.Close();
        }
    }
}

Open in new window

0
Comment
Question by:Philip Pinnell
  • 3
  • 2
  • 2
7 Comments
 
LVL 96

Assisted Solution

by:Bob Learned
Bob Learned earned 1200 total points
ID: 24730949
0
 
LVL 23

Assisted Solution

by:Tony McCreath
Tony McCreath earned 800 total points
ID: 24731012
One option maybe to switch to using the dedicated MySQL .Net Connector instead:

http://dev.mysql.com/downloads/connector/net/5.2.html

We use both and over the last few years I have found that the MySQL one is getting very stable while the odbc one is getting worse! We even get odbc errors know that require us to restart the server.
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 24731767
Hmmm...is there an echo in here?... *BIG GRIN*.
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 13

Accepted Solution

by:
Philip Pinnell earned 0 total points
ID: 24732735
Thanks for your suggestion. I will try to get the hosts to implement the .net connector anyway.

However, as often happens, describing the problem has set my mind off in another direction in order to fix this.

My thoughts were that a stored procedure might do the trick. If it only returned strings there should not be a problem. My thinking perhaps wasn't too clear here but following this approach I discovered some flaws in my query. Presumably being "forgiven" under Win2000.

The query that now reside in my stored proc is as follows

     SELECT
     ID,
     head,
     IF(LENGTH(item)> 50, CONCAT(SUBSTRING(item,1,50)," ..."),item) AS item,
     CONCAT("<A HREF=\"newsitem.aspx?from=ai&id=",Cast(ID as char(4)),"\">Read item</a>") AS ReadItem,
     DATE_FORMAT(modified,"%D %b %y") AS modified,    
     forcetop,
     forceverytop,
     modified as sortdate
     FROM newsitems WHERE deleted = 0 ORDER BY sortdate DESC ;


The third field "item" has the single quotes replaced with double quotes.
The fourth likewise with escaped double quotes and, perhaps more importantly, a cast of the integer ID.
Fifth field, a proper format of the date rather than just using substring.

so with this in a sp the page works! here I don't know if the same as in line sql works but I don't care.

just need to fix all the other bits than don't work now.

Again thanks for your participation.






0
 
LVL 13

Author Comment

by:Philip Pinnell
ID: 24732760
It remains to be seen whether the .net connector would forgive the "weaknessses" in my query.
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 24733081
ODBC is not as optimized as .NET data providers, especially when dealing with SQL Server, so you should always go that direction when there is the opportunity.
0
 
LVL 23

Expert Comment

by:Tony McCreath
ID: 24733151
That's the second time in a week I've been "pipped to the post". Time for that typing class.
0

Featured Post

Fill in the form and get your FREE NFR key NOW!

Veeam is happy to provide a FREE NFR server license to certified engineers, trainers, and bloggers.  It allows for the non‑production use of Veeam Agent for Microsoft Windows. This license is valid for five workstations and two servers.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this series, we will discuss common questions received as a database Solutions Engineer at Percona. In this role, we speak with a wide array of MySQL and MongoDB users responsible for both extremely large and complex environments to smaller singl…
By, Vadim Tkachenko. In this article we’ll look at ClickHouse on its one year anniversary.
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…
Suggested Courses

824 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question