|
The follow I thought, you do not care about error codes because I intentionally create/caused the error by adding IMAGE and cmd.Parameters.Add(new SqlParameter("@ImageData", (object)ImageData)) to catch (SqlException ex) call SaveMessageErrSQL(...)
|
|
|
|
|
Okay, I see. But have you gone through and checked the 4 things I listed?
|
|
|
|
|
The follow your instructions I added this to
[CODE]
private void cmdSave_Click(object sender, EventArgs e)
{
…
try
{
...
int rowsAffected = cmd.ExecuteNonQuery();//Error here
if (rowsAffected != 1) {
// inform user etc...
}
// Debug I saw rowsAffected = 0
...
}
catch (SqlException ex) // Debug I saw ex {"Operand type clash: nvarchar is incompatible with image"} System.Data.SqlClient.SqlException
{
...
SaveMessageErrSQL(sConError, strSQL); // I wrote the wrong code this place
}
}
[/CODE]
Debug I saw :
I see the variable rowsAffected = 0
+ ex {"Operand type clash: nvarchar is incompatible with image"} System.Data.SqlClient.SqlException
what do I do now ?
|
|
|
|
|
Hi,
I have a user website, having pages Home-->Brands --> Properties --> Designs --> Objects. Each page having its own sets of selection value.
Using breadcrumb navigation (sitemap path) in master page, and all the pages of website uses this masterapge.
Problem: When there are multiple user logged in diffrent machines, the breadcrumb node value (for a user) changes according to the latest selected value, inside any page (by latest slection of any other user).
Example: User A clicked Home-->Brands(Accenture)-->Properties(Accentire Prop).... and in the same time if another User B clciked Home-->Brands(Samsung)-->Properties(Samsung Prop)....
Then navigation trail for user A changes(when he selects the Designs(Accenture Des)) to the latest selection by any other user (user B), i.e. Home-->Brands(Samsung)-->Properties(Samsung Prop) --> Designs (Accenture Des).
Please help why it happens.
CODE:-
IN WEB.SITEMAP:
<siteMapNode title="" description="">
<siteMapNode url="~/Secure/Home.aspx" title="HOME" description="" roles="*" >
<siteMapNode url="~/Secure/Properties.aspx" title="Properties" description="" roles="*" >
<siteMapNode url="~/Secure/Designs.aspx" title="Style Guides Designs" description="" roles="*" >
<siteMapNode url="~/Secure/Objects.aspx" title="Objects" description="" roles="*" />
</siteMapNode>
</siteMapNode>
</siteMapNode>
In WEB.CONFIG
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<clear/>
<add name="XmlSiteMapProvider"
description="Default SiteMap provider."
type="System.Web.XmlSiteMapProvider"
siteMapFile="Web.sitemap" />
</providers>
</siteMap>
In Master page.master
<div id="SiteMapContainer" class="siteMapContainer" runat="server">
<asp:SiteMapPath ID="SiteMapPath1" runat="server" PathSeparator=" \ " PathDirection="RootToCurrent"
ParentLevelsDisplayed="10">
<CurrentNodeTemplate>
<%# Eval ("title") %>
</CurrentNodeTemplate>
<RootNodeTemplate>
<a href="Home.aspx">
<%# Eval ("title") %>
</a>
</RootNodeTemplate>
</asp:SiteMapPath>
</div>
In webpages(brands, Properties etc..):
if (SiteMap.CurrentNode != null)
{
SiteMapNode currentNode = SiteMap.CurrentNode;
currentNode.ParentNode.ReadOnly = true;
currentNode.ReadOnly = false;
currentNode.Title = _brand.BrandName ?? currentNode.Title.ToString();
currentNode.Url = BuildQueryString(currentNode.Key);
currentNode.ReadOnly = true;
currentNode.ParentNode.ReadOnly = false;
currentNode = currentNode.ParentNode;
currentNode.ReadOnly = false;
ItemSelectionLink.NavigateUrl = BuildQueryString(currentNode.Key);
currentNode.ReadOnly = true;
}
|
|
|
|
|
This is a pure ASP.NET question. You're most likely to get an answer there as that's a much more appropriate forum.
|
|
|
|
|
The SiteMap.CurrentNode property returns an object which is shared across all requests to your application. Your code is changing properties on the node, which will affect every subsequent request to your application.
The solution is simple: don't change the properties of the nodes in the site map.
Of course, you'll need to find another way to do what you're trying to achieve.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I have some C++ code which is based on WriteFile. To my understanding it uses this method to write: *both* to normal files on my filesystem and to USB also (HASP).
Basically this is the code in the constructor of the C++ class:
if(isOpen) return true ;
char PortNameUNC[256] ;
if(PortName[0] != '\\') strcpy(PortNameUNC, "\\\\.\\") ;
else *PortNameUNC = 0 ;
strcat(PortNameUNC, PortName) ;
*hDev = CreateFile(PortNameUNC, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(*hDev == INVALID_HANDLE_VALUE) return false ;
DCB *dcb = new DCB ;
memset(dcb, 0x00, sizeof(DCB)) ;
dcb->DCBlength = sizeof(DCB);
dcb->BaudRate = BaudRate;
dcb->Parity = Parity;
dcb->StopBits = StopBits;
dcb->ByteSize = ByteSize;
dcb->fBinary = TRUE;
dcb->fDsrSensitivity = 0;
dcb->fDtrControl = (DTR ? DTR_CONTROL_ENABLE : DTR_CONTROL_DISABLE) ;
dcb->fRtsControl = (RTS ? RTS_CONTROL_ENABLE : RTS_CONTROL_DISABLE) ;
dcb->fOutxCtsFlow = (CTS ? 1 : 0) ;
dcb->fOutxDsrFlow = (DSR ? 1 : 0) ;
dcb->fOutX = (XonnXoff ? 1 : 0) ;
dcb->fInX = 0 ;
if(!SetCommState(*hDev, dcb))
{
delete dcb ;
CloseHandle(*hDev) ;
*hDev = INVALID_HANDLE_VALUE ;
return false;
}
delete dcb ;
this->BaudRate = BaudRate;
this->Parity = Parity;
this->StopBits = StopBits;
this->ByteSize = ByteSize;
if(!SetTimeOut(readTimeOut, ReadIntervalTimeout) || !Reset())
{
CloseHandle(*hDev) ;
*hDev = INVALID_HANDLE_VALUE ;
return false;
}
isOpen = true ;
return true ;
And then there is method like write which simply calls `WriteFile` method - and passes the handle created in the constructor and data (I think this way it can write both to USB and my hard drive?)
Why is this `DCB` used additionally and also the `SetCommState` in the constructor?
What is the easiest way to mimic this behaviour in C#??? Do I need `SerialPort` class?
modified 28-Sep-15 9:32am.
|
|
|
|
|
The File[^] class has numerous methods that might suit you. As long as the USB device is mounted as a drive, you should easily be able to write to it using one of the Write... methods.
|
|
|
|
|
Dear Pete, I have changed my question a bit, and would very much appreciate if you can help! Thanks
|
|
|
|
|
"As long as the USB device is mounted as a drive,"
How do I ensure this happens?
|
|
|
|
|
That depends on what the USB device is?
USB is not a port. It is nothing like a serial or parallel port. It is a Bus, not unlike the expansion slots inside the machine. You have to talk to the device using whatever method it exposes to you. If it exposes itself as a serial device, you can use serial communication methods to talk to it. If it exposes itself as some kind of drive, you can use file methods.
|
|
|
|
|
How can I determine if it exposes as serial device or some kind of drive? It is HASP actually
(please see the updated question)
|
|
|
|
|
BY "HASP", I assume you're talking about one of these[^].
From the code you posted, it appears to expose itself as a serial device. The only way to be sure is to contact the manufacturer of it. They may even have a SDK for it to make writing code for it easier.
|
|
|
|
|
Dear Dave, please refer again to my original question. There is no SDK, this C++ project I have establishes communication with it. The only code is the one in constructor (which I posted), and then there is separate method like Write, which calls WriteFile (which I linked) - and I assume data is written either to USB or my file system (because it supports virtual HASPS also which is just file).
So my goal is to port that C++ code (which I posted) to C#. What approach should I take you think?
|
|
|
|
|
You can either rewrite the existing code, P/Invoking the functions the C code is using and rewriting the structures they use in C# (the most complicated way) or you can just rewrite using straight file and serial communication methods (simpler to write but you have no examples to work from). There is no "best" way.
|
|
|
|
|
I understand. So do you suggest:
- If the user has specified to use HASP, I use SerialPort class (from C#) for communication and its methods
- if User has specified file system to use I use just File class from C#
(So I must encapsulate this functionality in class and depending whether user uses HASP or ordinary files, I should perform that functionality inside functions, right? e.g. either ordinary Write versus write to Serial port etc.)
Did I get you correctly?
>> "simpler to write but you have no examples to work from"
What did you mean above?
|
|
|
|
|
user20044 wrote: What did you mean above?
Do you see any examples of using this HASP or the virtual HASP with normal serial and file operation methods? A little Google will tell you that.
|
|
|
|
|
Why would it be any different then using say Serial.Port to do simple read write operations, and in case of virtual HASP, to do read write operations using normal File.Write/Read methods?
|
|
|
|
|
plus isn't the code in my original question example of that? Other methods are just doing plain read/writes, with different number of bytes, etc.
|
|
|
|
|
No, your original code is serial only. What you send and receive over the serial port is the question. Does this key understand commands and responses? What are those commands? I don't need to know that. YOU do.
As for reading the file on disk....OK, you read the file, now what? What do you do with the data?
|
|
|
|
|
Dear Dave, the class I posted is like helper class to help establish communication. As I said it is using WriteFile method from Windows (to read both serial and filesystem, check this function can read both). Once I have a general means to communicate with the serial or file system - e.g., just read write methods - then I can check the functions what data they are sending to the serial, isn't it?
I understand what you mean, but in this class there are only methods like Read. Then some other class is calling this Read and passing parameters; or write thereof. Then I can see what parameters are passed to this serial from those other classes, isn't it?
This class I posted, like I said seems to be helper to send data to the serial or file system. Is it more clear now? Thanks.
|
|
|
|
|
After closer examination of your original post, it's pulling a little trick based on failure. The DCB structure is a Device Control Block[^] used in serial communication. The Win API treats files and serial comm the same, as a stream of data.
What it's doing is taking a path, to either a COM port or a file, and attempts to open that path and setup a DCB. If the DCB application to the CreateFile handle fails, it assumes the path is a file.
As has already been said, you can either use the same C code in C#, rewritten of course, and use the same trick, or you can simplify the code and just ask the user which they are going to use and go with normal SerialPort or File based code.
|
|
|
|
|
" or you can simplify the code and just ask the user which they are going to use and go with normal SerialPort or File based code."
Exactly this was my point. Thank you
|
|
|
|
|
It means I will have to duplicate code right? There are various kind of read write and query methods means I will have to write each separately for File and Serial Port classes, so be it, this is not big issue I guess?
|
|
|
|
|
user20044 wrote: There is no SDK They did when I had to interface with the HASP dongle. You'd first have to find out what you want exactly; write to a serial port, a USB or FileSystem. The C++ code is simply writing to a serial port.
You can do the same from C#, but may be easier to translate to managed C++[^]. Using those methods from C# is also possible, as shown here[^].
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|